我的问题是跳过了字符的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("\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;
}
答案 0 :(得分:0)
将scanf("%c", &rep);
更改为scanf(" %c", &rep);
。
这是因为&#39; \ n&#39;在您第一次输入数字时保留在stdin
。在执行scanf("%c", &rep);
时,该&#39; \ n&#39;由scanf()
立即使用,并分配给rep
。因为&#39; \ n&#39;不等于N&#39; N&#39; N&#39;也没有&#39; n,那个循环继续。
使用格式字符串中的前导空格,在开始阅读之前会丢弃所有空格字符。在你的情况下,看不见的&#39; \ n&#39;将被忽略,以便您可以输入一个字符。
另外,如果char rep = 0;
的原始值恰好是&#39; n&#39;则应该写rep
。或者&#39; N&#39;。