0

我正在制作一个程序,该程序应该读取用户的输入,直到用户输入非数字的内容。我必须用矢量来做到这一点。所以用户必须定义​​元素的值和向量的大小。numVals 应该被初始化为用户输入的元素数量。程序应该找到序列中第二小的数字。所以我试着先得到最小的数字,因为这样更容易。但是作为输入总是给出零而不是最小值。谁能告诉我出了什么问题?

#include<iostream>
#include<vector>
#include<limits>
#include<stdexcept>
using namespace std;

int main(){        
    unsigned int i;
    int numVals; 
    int min;        

    vector<int>sequence(numVals);       

    cout << "sequence: ";
    while (cin.good()){
       for (i=0; i<sequence.size(); ++i){        
            cin >> sequence.at(i);              
           }  
    }

    min =sequence.at(0);
    for (i=0; i<sequence.size();++i){
        if (sequence.at(i)< min){
            min=sequence.at(i);
        }
    }
    cout << min << endl;
    return 0;
}  
4

1 回答 1

1

你的代码有很多问题。以下代码应该符合您的想法。

#include<iostream>
#include<vector>

using namespace std;

int main()
{ 
    int num;
    vector<int>sequence;

    cout << "sequence: ";
    while(cin >> num)
       sequence.push_back(num);

    int min = sequence.at(0);

    for (int n: sequence)
    {
        if (n < min)
          min = n;
    }

    cout << min << endl;
}

首先,您通过未初始化来初始化具有未定义大小的向量numVals

其次,cin.good()使用不当。cin.good()给出最后输入的状态。因此,在它返回 false 的情况下,零输入将进入您的序列,这意味着零输入将始终是最小的!

编辑:由于@nm 的评论,重构了实现

于 2019-09-24T08:15:21.200 回答