C 在while循环中保留变量?

C 在while循环中保留变量?,c,loops,while-loop,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 &

我试图创建一个程序,将输入放入数组中,然后在输入终止时将它们全部打印出来。我的理解是,当你在循环外声明一个变量时,它会保留这些值,但我无法解决这个问题。我知道总有办法做到这一点,但我还是一无所获

#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;
    }
}
#包括
int main(){
int i=0;
int n=0;
int size=0;
整数[i];
scanf(“%d”和编号[i]);
while((i=1&&number[i-1]!=42)){
scanf(“%d”和编号[i]);
i++;
大小++;
//printf(“%d”,数字[i]);
}
printf(“%d”,sizeof(数字));
而((n=0&&n
您的
情况:

(i = 1 && numbers[i-1] != 42) 
有两个问题:

  • i=…
    实际上为
    i
    赋值。在意外循环的cas中,始终检查条件中是否存在
    =
    而不是
    =

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


编辑:当然,第二个循环中n的原理是一样的;-)

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

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

  • while((i=1&&number[i-1]!=42)) 每次while循环迭代时,它都会将i的值设置为1,并比较数字[0]=42这也毫无意义

  • 而((n=0&&n
  • 虽然你们并没有正确地说明你们的问题,但我假设你们想扫描这个数字直到得到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;
        }
    }
    
    #包括
    int main(){
    int i=0;
    int n=0;
    int size=1;
    整数[10000];//我假设最大输入为10000
    scanf(“%d”和编号[0]);
    i=1;
    而((数字[i-1]!=42)){
    scanf(“%d”和编号[i]);
    i++;
    大小++;
    //printf(“%d”,数字[i]);
    }
    printf(“大小=%d\n”,大小);
    而(n
    代码中有三件事:

    • 整数[i];正在尝试声明一个零元素数组,该数组解释了未定义的行为。(尽管C中没有绑定/范围检查)
    • scanf(“%d”,&numbers[i]),当i>=1时,为此分配的存储在哪里?大多数情况下会在未定义的区域结束/过度写入现有值
    有关更多信息,请参阅以下链接:

    也就是说,您可以声明一个固定大小的数组,也可以使用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");
    }
    
    #包括
    int main(){
    int i=0;
    int n=0;
    int size=0;
    整数[42];
    scanf(“%d”)和数字[i++];
    而(((数字[i-1]!=42)))
    scanf(“%d”)和数字[i++];
    size=sizeof(numbers)/sizeof(int);/*不需要,因为数组大小是预定义的*/
    printf(“\n大小:%d\n”,大小);
    而(n

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

    这有意义吗:
    int i=0;,整数[i]
    ???
    while((i=1&&numbers[i-1]!=42)){
    将在每次迭代之前将
    i
    设置为1。它将不允许
    i
    递增。对
    循环使用
    。另外,
    整数[i]
    为0时是非法的(即始终在代码中)。谢谢!这很有意义。