Scanf Skip扫描字符
我的问题是跳过了字符的scanf并且没有检查扫描字符以查看我是否要再次重复该程序,为什么会发生这种情况呢?
#include #include int main() { int number,check; char rep; printf("Program to check if number is even or odd"); while( (rep!='N') || (rep!='n') ) { printf("\n\nPlease enter the number: "); scanf("%d",&number); check = number%2; if(check != 0) printf("\nNumber is odd."); else printf("\nNumber is even."); printf("\n"); printf("Do you want to enter number again?\nY=yes\tN=no\n"); scanf("%c", &rep); } return 0; }
更改scanf("%c", &rep);
到scanf(" %c", &rep);
。
这是因为第一次输入数字时,’\ n’在stdin
保留。 执行scanf("%c", &rep);
,’\ n’由scanf()
立即消耗并分配给rep
。 由于’\ n’既不等于’N’也不等于’n’,因此该循环继续。
使用格式字符串中的前导空格,在读取开始之前将丢弃所有空格字符。 在您的情况下,将忽略不可见的’\ n’,以便您可以输入一个字符。
另外,你应该写char rep = 0;
相反,如果rep
的原始值恰好是’n’或’N’。