检查用户的负输入,使用数组

时间:2016-12-22 23:52:46

标签: c++

我需要编写一个代码,用于从用户那里获得5个正数。 这是我的代码:

cout << "Write 5 positive numbers:" << endl;
int input;
int num[5];

for(int i = 0; i <= 4; ++i){
    cin >> input;
    if(input < 0){
        cout << "Error" << endl;
    }else{
        num[i] = input;
    }
}
for(int i = 0; i <= 4; ++i){
    cout << "Number " << i << " = " << num[i] << endl;
}

问题是数组应该只存储正数。当我输入负num时,它也存储它,然后打印垃圾值。例如,输入为:3 -2 1 6 8 输出是:

Number 0 = 3
Number 1 = -1608404014
Number 2 = 1
Number 3 = 6
Number 4 = 8

代码应该要求用户输入输入,直到数组中的所有5个桶只用正数填充

2 个答案:

答案 0 :(得分:5)

打印垃圾值,因为如果输入负数,则会跳过代码中数组的索引。

要让您的程序在用户输入正值之前不断询问用户输入,您需要在while loopif block,如果输入负值,则会显示Error消息。

此外,您还需要从代码中删除else block内的for loop,因为这是导致垃圾值打印的原因。

尝试以下代码

int main()
    {
        cout << "Write 5 positive numbers:" << endl;
        int input;
        int num[5];

        for(int i = 0; i <= 4; i++)
        {
            cin >> input;
            if(input < 0)
           {
                cout << "Error" << endl;
                while(input < 0)
                {
                   cin>>input;
                }

            }

             num[i] = input;
        }

        for(int i = 0; i <= 4; i++){
         cout << "Number " << i << " = " << num[i] << endl;
         }

         return 0;
    }

答案 1 :(得分:1)

因为输入值是负数你不会将它存储到元素i但是只弹出一条消息然后你没有输入就离开了这个元素并增加了循环计数器,因为你猜测未初始化的变量有垃圾值:

解决方案是使用嵌入的wile循环来阻止负值,例如直到输入有效值:

int input;
int num[5];

for(int i = 0; i <= 4; ++i)
{
    cin >> input;
    while(input < 0)
    {
        cout << "Error" << endl;
        cout << "num[ " << i << "]: ";
        cin >> input;
    }
        num[i] = input;
}

for( i = 0; i <= 4; ++i){
cout << "Number " << i << " = " << num[i] << endl;
}