【问题标题】:Checking negative input from user, working with array检查用户的负面输入,使用数组
【发布时间】:2017-05-08 16:20:16
【问题描述】:

我需要编写一个代码来从用户那里获取 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 个桶都将仅填充正数

【问题讨论】:

  • 您的代码完全按照您的指示行事。如果输入负数,则跳过该数组的索引。
  • 你需要使用while loop

标签: c++


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

    为了让您的程序一直询问用户输入,直到用户输入正值,您需要在 if block 中添加一个 while loop,如果输入负值,它会显示 Error 消息。

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

    试试下面的代码

    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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多