我正在尝试编写一个程序,需要10个人吃煎饼,并返回吃最多煎饼的人,我正在使用向量,以便在用户输入并稍后返回时创建新元素,我尝试使用阵列,但我遇到了更难的时间。
#include <iostream>
#include <vector>
using namespace std ;
int main()
{
int lnum , input ;
int temp = 0;
vector <int> persons(10) ;
cout << "This program takes input for 10 people who ate pancakes, \
then checks who ate the most pancakes " << endl;
cout << "Enter the amount of pancakes each person ate: " << endl ;
cout << "Person 1: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 2: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 3: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 4: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 5: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 6: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 7: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 8: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 9: " ;
cin >> input ;
persons.push_back(input);
cout << "Person 10: " ;
cin >> input ;
persons.push_back(input);
cout << endl ;
for(int i = 0 ; i < 11; i++){
if(persons.at(i) > temp){
temp == persons.at(i) ;
}
}
cout << temp << endl ;
return 0 ;
}
大多数情况下一切运行正常,除非我运行程序时,它将temp返回为0,而不是实际的数字应该是什么。当我调用像
这样的命令时person.at(1) ;
它返回错误的值,我做错了,这是一个逻辑错误还是语法?
答案 0 :(得分:4)
您可以替换整个部分:
for(int i = 0; i < persons.size(); i++) // note the non-hard-coded conditional
{
if(persons.at(i) > temp)
{
temp = persons.at(i); // note fixed to assignment!
}
}
与
temp = std::max_element(persons.begin(), persons.end());
答案 1 :(得分:2)
首先,您正在初始化矢量:
vector <int> persons; // Vector will resize automatically
然后,尝试=
而不是==
,并更改循环的限制:
for(int i = 0 ; i < persons.size(); i++){
if(persons.at(i) > temp){
temp = persons.at(i); // Assignment, not comparison
}
}
请参阅@ ZacHowland的答案,以便更轻松地找到vector
的最大元素。
答案 2 :(得分:1)
这一行:
temp == persons.at(i) ;
不会将person [i]的值赋给temp。它比较了这两个值,然后删除了布尔结果。
您可能只需要一个=
。