这段代码在C中无限运行的是什么?

时间:2014-09-20 18:31:42

标签: c extract infinite-loop

在这个程序中:

#include<stdio.h>

int a[5],c=0;

int main()
{
    printf("Enter no\n");
    scanf("%d",&a);
    for(int i=0;a[i];i=+2) {
        printf("%d ",a[i]);
    }
    return 0;
}

我想输入12345并获取输出1 3 5,但程序永远不会终止。我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

老实说,你的代码遍布整个地方,看起来好像只是疯狂地猜测:

  1. 您无法将int数组传递给scanf(),要求它读取一个int,并期望它将多个数字放在一起数字编号本身就是各个元素。你需要读一个字符串,或者读一个int并自己提取数字。

  2. 变量c未使用。

  3. 你的for循环毫无意义。即使你已经填充了数组a的所有元素,它仍然没有意义,而且你还没有。

  4. 这是您的代码的合理版本,读入字符串:

    #include<stdio.h>
    
    int main(void) {
        char a[6];
    
        printf("Enter no\n");
        fgets(a, 6, stdin);
    
        for (int i = 0; i < 5; i += 2) {
            printf("%c ", a[i]);
        }
    
        putchar('\n');
    
        return 0;
    }
    

    带输出:

    paul@local:~/Documents/src/sandbox$ ./num
    Enter no
    12345
    1 3 5 
    paul@local:~/Documents/src/sandbox$ 
    

    请注意,这无法检查用户是否确实输入了五个字符,您的程序应该这样做。

答案 1 :(得分:2)

for循环以这种方式定义

for(initialization ; condition check ; variable update)

代码

for(int i=0;a[i];i+2)
{
    printf("%d ",a[i]);
}

for循环的条件部分设置为a [i],这可能永远不会为假。所以循环无限运行。变量更新也不正确。我的价值应该更新。

for(int i=0; i<5; i+=2)
{
    printf("%d ",a[i]);
}

答案 2 :(得分:0)

代码无限运行,因为循环内部没有任何变化会导致循环终止。循环内的任何位置都不会更改变量的值。如果a[i]在第一次迭代中为真,那么它将永远保持为真,因为i的值永远不会改变。