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’。