c-当输入负整数时,输入验证递归函数(想要正整数)无法工作

  • 本文关键字:整数 工作 验证 递归函数 c scanf
  • 更新时间 :
  • 英文 :

int get_num_order(){
char term;
int input;
printf("Please enter the number of items you want to order: ");
if(scanf(" %d%c", &input, &term) != 2 || term != 'n' || input < 0){
// printf("%d", input);
scanf("%*[^n]");
get_num_order();
}
else{
// printf("%d", input);
return input;
}

}

我一直在网上学习各种教程,这本教程迄今为止效果最好。它成功地处理了小数、字母和空白,但却被负数卡住了。程序只是暂停。我不确定问题出在哪里,救命?

scanf("%*[^n]");在输入负数后阻止了该函数。如果第一个scanf读取负数和换行符,则缓冲区中没有可删除的内容
这似乎奏效了。

int get_num_order(){
char term = 0;
int input = 0;
printf("Please enter the number of items you want to order: ");
if(scanf("%d%c", &input, &term) != 2 || term != 'n' || input < 0){
// printf("t%dn", input);
if ( term != 'n') {
scanf("%*[^n]"); // remove all from buffer to newline
}
input = get_num_order();
}
return input;
}

相关内容

最新更新