c-扫描跳过扫描字符

  • 本文关键字:扫描 字符 c scanf
  • 更新时间 :
  • 英文 :


我的问题是跳过了字符的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"。

最新更新