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;
}