考虑以下C程序:
int number;
int sum;
char i;
printf("Enter a number: ");
scanf("%d", &number);
while (i != 'q')
{
printf("Enter a number: ");
scanf("%d", &number);
sum = number + number;
}
sum = number + number;
printf("The sum is %d", sum);
为什么会进入无限循环?我没有在代码中看到任何错误。
答案 0 :(得分:3)
i
未初始化。检查条件时
while (i != 'q')
任何事情都可能发生(未定义的行为),因为您正在检查未初始化的变量。此外,您不会在循环中更改i
的值。你怎么以及为什么期望病情变得虚假?
scanf
的 %d
将无法扫描char
。而且你的代码无论如何都没有多大意义。如果你告诉我们它需要做什么,可能会更有意义。
我想你想要这个:
char number;
int sum = 0;
printf("Enter a number (enter 'q' to exit): ");
scanf("%c", &number);
while (number != 'q')
{
sum += number-'0';
printf("Enter a number: ");
scanf("%c", &number);
}
printf("The sum is %d", sum);
如果您想知道为什么以及-'0'
做了什么,您需要查看ASCII table。每个字符都有自己的整数值,如ASCII表中所示。
答案 1 :(得分:2)
首先,你不初始化char i;
并导致未定义的行为,然后在你的循环中你永远不会修改:
while (i != 'q')
{
printf("Enter a number: ");
scanf("%d", &number);
sum = number + number;
}
这段代码毫无意义。您希望i
何时成为'q'
?
答案 2 :(得分:0)
代码正在创建一个无限循环,因为您正在使用while (i!='q')
。
在这里,您尚未初始化i
的值,因此编译器会将默认值设置为char i
,这不等于' q'。
因此,无论何时检查while loop
中的条件,它都会成立。因此形成了连续循环
改善
您可以通过在程序中设置字符i
的输入来改进它。或者将条件更改为程序中的任何其他内容。一种解决方案是: -
int number;
int sum;
char i;
printf("Enter a number: ");
scanf("%d", &number);
while (i != 'q')
{
printf("Enter a number: ");
scanf("%d", &number);
sum = number + number;
printf("Press q to terminate: ");
scanf("%c", &i);
}
sum = number + number;
printf("The sum is %d", sum);
答案 3 :(得分:0)
首先,我是未初始化的,而且在循环内部,i的值未初始化或更改。