isdigit和scanf具有无限循环

时间:2014-12-10 02:20:40

标签: c

我的计划有什么问题?当我第一次输入数字时,它会在内部打印语句if,但是当我退出程序并使用char重新输入时,它会在else中打印语句,并且当我继续输入数字时,循环永远不会退出。 / p>

#include <stdio.h>
#include <ctype.h>
int main()
{
    int x;
    char y;
    for(x=0;x<4;x++)
    {
            puts("Please enter a number:");
            scanf("%c",&y);
            if(isdigit(y))
            {
                    printf("Y is a digit!\n");
                    break;
            }
            else
            {
                    printf("Y is not a number, please enter another number:\n");
                    scanf("%d",&y);
            }
    }
    return 0;

}

2 个答案:

答案 0 :(得分:1)

我认为您的计划存在错误,尤其是else部分。您使用scanf("%d",&y);代替scanf("%c",&y);

%d用于整数,但y的声明为char,因此您必须使用%c

答案 1 :(得分:0)

"%c" 跳过领先的空格。

使用scanf("%c",&y);,代码会读取第一个char,其中第二个传递可能是前一个条目的'\n'。要使scanf("%c",&y);滑动前导空格,请使用:

scanf(" %c",&y); // Note added space.

要将数字读入char,请按照@Deduplicator的建议使用以下内容。请注意,它不需要前导' ',因为除3之外的所有格式说明符都忽略前导空格:"%c""%[""%n"

scanf("%hhd",&y);

当然,代码可以简单地使用int y 注意:isdigit()仅对0到UCHAR_MAX(例如255)和EOF有效。

int y;
puts("Please enter a number:");
scanf("%d",&y);
if(isdigit(y))