为什么这会创建一个无限循环

时间:2015-07-01 09:08:43

标签: c loops

考虑以下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);    

为什么会进入无限循环?我没有在代码中看到任何错误。

4 个答案:

答案 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的值未初始化或更改。