我的计划有什么问题?当我第一次输入数字时,它会在内部打印语句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;
}
答案 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))