所以我在用
#include <stdio.h>
int main()
{
while(true){
int n, c, k, space = 1;
printf("pick a number between 1 and 25\n");
scanf("%d", &n);
space = n - 1;
for (k = 1; k <= n; k++) {
for (c = 1; c <= space; c++)
printf(" ");
space--;
for (c = 1; c <= 2*k-1; c++)
printf("*");
printf("\n");
}
space = 1;
for (k = 1; k <= n - 1; k++)
{
for (c = 1; c <= space; c++)
printf(" ");
space++;
for (c = 1 ; c <= 2*(n-k)-1; c++)
printf("*");
printf("\n");
}
}
}
当您输入数字时,该程序运行良好。 但是当你输入一个字母时,它会这样做
pick a number between 1 and 25
pick a number between 1 and 25
pick a number between 1 and 25
它会一直这样做,直到您退出应用程序。
现在,我知道这是由于 while(true)
造成的,但为什么要输出它呢?这是特定于某个处理器的吗?
编辑:您必须先输入一个字母才能重现问题
最佳答案
此行为是跨处理器和 C(和 C++)实现的标准行为。
问题是您在预期会找到数字的地方输入了一个字母。由于它没有找到数字,它将字母留在输入队列中,并且尝试读取数字失败。然后你再重复一遍。你没有做任何事情来删除这封信,所以它会再次尝试读取一个数字,并且(当然)再次失败。
基本上,在您读取输入的任何时候,您都想检查读取是否成功。因为您使用的是 scanf
,所以您可以检查它的返回值。它返回它成功读取的项目数,所以在这种情况下你可以这样做:
printf("Please pick a number between 1 and 25");
if (scanf("%d", &number) == 1)
// we got a number
else
// bad input.
在“错误输入”的情况下,您通常希望从输入中读取字符直到换行,然后再次尝试读取数字。
关于c - 当我在控制台中输入一封信时,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188016/