【发布时间】:2019-01-01 07:49:18
【问题描述】:
我试图让我的循环接受用户输入,如果值为 1 到 9,则循环结束(这部分工作正常)。但是如果用户输入的不是数字 1 - 9,那么程序应该会显示一条错误消息,然后再次询问用户输入,并重新检查输入是否是数字 1 - 9。在测试时,如果我输入字母“g”,然后程序会无限期地吐出错误消息,而不仅仅是一次。这是为什么呢?
代码如下:
int playerMove;
printf("Please enter a number 1 - 9:\n");
for(;;)
{
scanf("%d", &playerMove);
if(playerMove > 0 && playerMove < 10)
{
printf("\nYou have selected position %d. \n\n", playerMove);
break;
}
else
{
printf("Invalid selection. Please enter a number 1 - 9:\n");
}
}
【问题讨论】:
-
你怎么知道你打电话给
scanf()真的有效?您忽略了返回值。 -
当
scanf期待一个整数输入 (%d) 而你给它一个非整数值时,你会假设会发生什么? -
@rdowell 我假设它将采用 ascii 字符的十进制值,在本例中为 'g',即 103,并使用该值。这是不正确的吗?
-
@JulianBraha 如果是这种情况,那么“1”将被读取为 49,这是该字符的 ascii 代码。