我正在尝试创建一个将输入输入到数组中的程序,然后在输入终止时将它们全部打印出来。我的理解是,当你声明一个变量在之外的循环时,它会保留这些值,但我无法解决这个问题。我知道有办法以某种方式做到这一点,但我正在画一个空白。
#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;
}
}
答案 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件事:
有关详细信息,请参阅以下链接:
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的数组
while((i = 1&amp;&amp; numbers [i-1]!= 42)) 每当你循环迭代时,它将i的值设置为1并比较数字[0]!= 42这也没有意义。
while((n = 0&amp; n&lt; sizeof(numbers))) 再次将n分配给0并检查n是否小于sizeof(数字),这总是正确的。
虽然你没有正确指出你的问题我假设你要扫描数字直到你得到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;
}
}