Scanf跳过扫描字符

时间:2016-03-29 10:35:52

标签: 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("\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;
}

1 个答案:

答案 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;。