【问题标题】:Storing user input values into an array and displaying them shows garbage values将用户输入值存储到数组中并显示它们会显示垃圾值
【发布时间】:2020-04-01 16:16:57
【问题描述】:

我正在开发一个简单的程序,要求用户输入偶数并输入奇数。它们分别存储在数组storeItem1storeItem2 中。程序询问用户两次。问题出在我的输出上。我想显示用户输入的值

我将用于显示值的 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]);
    }

}

【问题讨论】:

  • 您的数组 storeItem1storeItem2 包含垃圾,除非您明确初始化它们。
  • @NateEldredge 我的if(!storeItem1)break; 条件不会识别数组中的其他值包含垃圾值吗?
  • 不,您的测试if(!storeItem1[dis]) 仅测试storeItem1[dis] 是否为零。这与写if(storeItem1[dis] == 0) 完全相同。垃圾值当然可以是非零的。例如,它可能是 57。
  • 感谢@NateEldredge 的澄清,我真的必须从更细微的资源中研究数组。

标签: c arrays loops storage


【解决方案1】:

这么快回答我的问题,我感到很尴尬。我修改了循环条件,

for(dis;dis<i;++dis)
    {
        //if(!storeItem1[dis])break; //exits loop when current array element is null
        printf("\nEven Numbers are: %d",storeItem1[dis]);

    }

    for(dis2;dis2<j;++dis2)
    {
        //if(!storeItem2[dis2])break; //exits loop when current array element is null
        printf("\nOdd Numbers are: %d",storeItem2[dis2]);
    }

循环自动终止,无需条件语句退出。修改了 for 初始化中的条件,使得变量 dis&lt;i and dis2&lt;j 和一旦达到与 i and j 相同的值就会终止。

谢谢大家。

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多