我的问题是跳过了字符的scanf,它没有检查扫描字符以查看我是否想再次重复该程序,为什么会发生这种情况?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int number,check;
char rep;
printf("Program to check if number is even or odd");
while( (rep!='N') || (rep!='n') )
{
printf("nnPlease 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=yestN=non");
scanf("%c", &rep);
}
return 0;
}
将scanf("%c", &rep);
更改为scanf(" %c", &rep);
。
这是因为第一次输入数字时,stdin
中会留下一个"\n"。当执行scanf("%c", &rep);
时,该'\n'立即被scanf()
消耗并分配给rep
。由于'\n'既不等于'n'也不等于'n',因此循环将继续。
使用格式字符串中的前导空格,在开始读取之前将丢弃所有空白字符。在您的情况下,不可见的'\n'将被忽略,以便您可以输入字符。
此外,您应该改为编写char rep = 0;
,以防rep
的原始值恰好是"n"或"n"。