【发布时间】:2020-04-01 16:16:57
【问题描述】:
我正在开发一个简单的程序,要求用户输入偶数并输入奇数。它们分别存储在数组storeItem1 和storeItem2 中。程序询问用户两次。问题出在我的输出上。我想显示用户输入的值。
我将用于显示值的 for 循环的退出条件是 if(!storeItem1)break;,一旦数组的当前元素为空,循环就会结束。然而输出最终是这样的。
Even Numbers Are: 2
Even Numbers Are: 4
Even Numbers Are: some garbage value
Odd Numbers Are: 1
Odd Numbers Are: 3
Odd Numbers Are: some garbage value
我不明白的是,一旦循环的迭代到达数组元素为空的部分,为什么条件不终止循环?它不应该在显示所有不为空的数组值后结束吗?这是我的代码附在下面。提前致谢!
#include<stdio.h>
main(void)
{
int storeItem1[8], storeItem2[8], even, odd;
int i=0, j=0, dis=0, dis2=0;
do
{
printf("Input Even Number: ");
scanf("%d",&even);
storeItem1[j]=even;
printf("Input Odd Number: ");
scanf("%d",&odd);
storeItem2[j]=odd;
++j;
++i;
}while(i<2); //asks user to input twice
//display the stored values
for(dis;dis<8;++dis) //display all input even numbers
{
if(!storeItem1[dis])break; //exits loop when current array element is null
printf("\nEven Numbers are: %d",storeItem1[dis]);
}
for(dis2;dis2<8;++dis2) //display all input odd numbers
{
if(!storeItem2[dis2])break; //exits loop when current array element is null
printf("\nOdd Numbers are: %d",storeItem2[dis2]);
}
}
【问题讨论】:
-
您的数组
storeItem1和storeItem2包含垃圾,除非您明确初始化它们。 -
@NateEldredge 我的
if(!storeItem1)break;条件不会识别数组中的其他值包含垃圾值吗? -
不,您的测试
if(!storeItem1[dis])仅测试storeItem1[dis]是否为零。这与写if(storeItem1[dis] == 0)完全相同。垃圾值当然可以是非零的。例如,它可能是 57。 -
感谢@NateEldredge 的澄清,我真的必须从更细微的资源中研究数组。