C++ 我应该怎么做才能得到用户输入的最小序列?
我正在制作一个程序,该程序将读取用户的输入,直到用户输入非数字的内容。我必须用向量来做这个。因此,用户必须定义元素的值和向量的大小。numVals应根据用户输入的元素数量进行初始化。程序应该找到序列的第二小数目。所以我试着得到第一个最小的数字,因为这更容易。但输入值总是零,而不是最小值。谁能告诉我怎么了C++ 我应该怎么做才能得到用户输入的最小序列?,c++,C++,我正在制作一个程序,该程序将读取用户的输入,直到用户输入非数字的内容。我必须用向量来做这个。因此,用户必须定义元素的值和向量的大小。numVals应根据用户输入的元素数量进行初始化。程序应该找到序列的第二小数目。所以我试着得到第一个最小的数字,因为这更容易。但输入值总是零,而不是最小值。谁能告诉我怎么了 #include<iostream> #include<vector> #include<limits> #include<stdexcept>
#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
无符号整数i;
整数;
int-min;
向量序列(numVals);
cout序列at(i);
}
}
最小值=序列。在(0)处;
对于(i=0;i来说,您的代码有很多问题。下面的代码应该符合您的想法
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
int-num;
矢量序列;
cout>num)
顺序。推回(num);
int min=序列。在(0)处;
for(int n:序列)
{
如果(n 向量序列中的cout(numVals);
,numVals
未初始化。让我们从显而易见的开始。为了找到最小值,您不需要保留整个序列。假设有人在电话上读一系列数字,而您没有纸或笔,而且序列太长,无法记住。您仍然可以找到最小的数字吗?嗯……您没有需要迭代所有序列。初始化“min”使用std::numeric\u limits::max。当你收到输入时,你可以用最后一个输入检查。如果你想对向量做些什么,请忘记我的想法,不要比原来的更好。cin>>num
是使cin变差的原因。在这之前检查cin是否好,你什么都买不到。@n.m.我不会说没有更好的。有cr基准差异。原来的不起作用,这一个起作用。我的意图不是重构或重新设计OP的代码,只是指出错误并提供一个快速的解决方法。@n.m.在cin不好时,通过根本不插入来修复它。它起作用了,因为“工作”的定义很糟糕。它可能通过了测试。现在您正在进行反惯用重复检查,这在技术上是可行的,但会使您的代码在代码审查中失败。您是否熟悉while(cin>>…)
惯用用法?这确实更好;)