从while循环中保留变量?

时间:2014-11-09 16:31:51

标签: c loops while-loop

我正在尝试创建一个将输入输入到数组中的程序,然后在输入终止时将它们全部打印出来。我的理解是,当你声明一个变量之外的循环时,它会保留这些值,但我无法解决这个问题。我知道有办法以某种方式做到这一点,但我正在画一个空白。

#include <stdio.h>
int main(){
    int i=0;
    int n=0;
    int size=0;
    int numbers[i];
    scanf("%d", &numbers[i]);
    while ((i = 1 && numbers[i-1] != 42)){
        scanf("%d", &numbers[i]);
        i++;
        size++;
        //printf("%d",numbers[i]);
    }
    printf ("%d", sizeof(numbers));
    while ((n = 0 && n < sizeof(numbers))){
        printf("%d", numbers[i]);
        printf("\n");
        ++i;
        ++n;
    }
}

3 个答案:

答案 0 :(得分:1)

您的while条件:

(i = 1 && numbers[i-1] != 42) 

有两个问题:

  • i = ...实际上为i分配了一个值。如果出现意外的循环,请检查条件中是否有=而不是==

  • 由于operator precedence,您将1 &&分配给i。只要您处于循环中,该值就是真值(即1),只要numbers[i-1]为42,i就会变为0(因为numbers[i-1]!=42是假的,1 && false是假的,即0)。这给您的印象是它没有保留价值。

编辑:当然,它与第二个循环中的n的原理相同; - )

答案 1 :(得分:1)

代码中的3件事:

  • int numbers [i];试图声明一个零元素数组,它解释了未定义的行为。(虽然在C中没有绑定/范围检查)
  • scanf(“%d”,&amp; numbers [i]),当i&gt; = 1时,哪里是为此分配的存储空间?大部分都会在未定义的区域/写入现有值。

有关详细信息,请参阅以下链接:

Declaring an array with 0 number of elements can still store values

Why does C not define minimum size for an array?

表示你可以声明一个固定大小的数组,或者使用malloc动态声明大小,然后遍历元素,分配并打印它们。

- while循环:运营商的评估和优先级: 你可以重新编写你的程序:

#include <stdio.h>
int main(){
    int i=0;
    int n=0;
    int size=0;
    int numbers[42];

    scanf("%d", &numbers[i++]);
    while (((numbers[i-1] != 42)))
        scanf("%d", &numbers[i++]);

    size=sizeof(numbers)/sizeof(int); /* Not necessary as array size pre-defined*/
    printf("\nsize:%d\n",size);

    while(n < size)
        printf("%d\n", numbers[n++]);
    printf("\n");
}

注意:您可以更改数组的大小,请记住它是一个自动变量,那些尚未显式初始化的数组元素将填充垃圾值。

答案 2 :(得分:0)

你的代码中有很多错误。它们如下 -

1.int i = 0; int number [i];这毫无意义。因为你正在创建一个大小为0的数组

  1. while((i = 1&amp;&amp; numbers [i-1]!= 42)) 每当你循环迭代时,它将i的值设置为1并比较数字[0]!= 42这也没有意义。

  2. while((n = 0&amp; n&lt; sizeof(numbers))) 再次将n分配给0并检查n是否小于sizeof(数字),这总是正确的。

  3. 虽然你没有正确指出你的问题我假设你要扫描数字直到你得到42.然后你想要打印数组的大小和数字。 这是你的工作代码。

        #include <stdio.h>
        int main(){
        int i=0;
        int n=0;
        int size=1;
        int numbers[10000];//I am assuming maximum input to be 10000
        scanf("%d", &numbers[0]);
        i=1;
        while (( numbers[i-1] != 42)){
            scanf("%d", &numbers[i]);
            i++;
            size++;
            //printf("%d",numbers[i]);
        }
        printf ("size=%d\n", size);
        while ( n < size){
            printf("%d", numbers[n]);
            printf("\n");
            //++i;
            ++n;
        }
    }