仅在C中进行error handling时强制输入为正数

我有一个微不足道的问题要问。 我的程序应该只采用正整数。 如果有任何违法行为,应提示用户再次输入号码。

我现在的代码是:

#include int main(){ int reads; int num=0; char a; while(num<=0){ printf("Please Enter positive integer: "); while(((reads = scanf("%d%c", &num, &a)) != 2 && reads != EOF) || a != '\n' ){ do { printf("Please Enter positive integer: "); reads = scanf("%c", &a); }while(reads != EOF && a != '\n'); } } printf("Num is: %d", num); } 

上面的代码几乎完成了我想要的; 但是,当输入是多个字母时,输出提示将被多次打印,这让我很烦恼。

  Please Enter positive integer: pdesf Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: dfwerasdfwe Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: Enter positive numbers only: 

如果你能帮助我解决这个问题,或者为这个看似微不足道的小问题提供更好的解决方案,我将不胜感激。 谢谢!

使用fgets将整行读入缓冲区。 如果您只想处理第一个字符,则可以忽略其余字符。 有点像:

 char buf[MAX_LINE_LEN]; if (fgets(buf, MAX_LINE_LEN, stdin)) { char a = buf[0]; /* Do handling... */ } else { /* error */ } 

在浏览器中编码,可能包含错误的痕迹。

 while(num<=0){ printf("Please Enter positive integer: "); while(((reads = scanf("%d%c", &num, &a)) != 2 && reads != EOF) || a != '\n' ){ printf("Please Enter positive integer: "); while(getchar() != '\n'); } } 

我已经解决了你的计划。 在Turbo C ++中尝试以下程序:

 #include #include main() { char n[2],ni; clrscr(); GET: printf("Enter positive number: "); scanf("%s",&n); if(atoi(n)>0) { printf("You have entered "); ni=atoi(n); printf("%d",ni); } else if(atoi(n)<=0) { printf("Wrong choice\n"); goto GET; } else { printf("Wrong choice\n"); goto GET; } getch(); }