【问题标题】:What is this code running infinitely in C?这段代码在 C 中无限运行是什么?
【发布时间】:2014-09-20 18:31:42
【问题描述】:

在这个程序中:

#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,但程序永远不会终止。我该怎么做?

【问题讨论】:

  • 因为a[i] 永远不会是0。
  • 首先在数组a uinsg 中取五个输入进行循环,然后放入i+=2 而不是i+2
  • i 的值永远不会改变。

标签: c extract infinite-loop


【解决方案1】:

老实说,你的代码到处都是,看起来你只是在疯狂地猜测:

  1. 您不能将int 数组传递给scanf(),要求它读取一个int,并期望它通过本身就是这样。您要么需要读入一个字符串,要么读入一个 int 并自己提取数字。

  2. 变量c未使用。

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

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

#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$ 

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

【讨论】:

    【解决方案2】:

    for循环就是这样定义的

    for(initialization ; condition check ; variable update)
    

    在你的代码中

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

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

    试试

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 2013-07-25
        • 2023-03-18
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        相关资源
        最近更新 更多