矢量循环不能正常工作

时间:2013-12-20 03:40:34

标签: c++ arrays loops for-loop vector

我正在尝试编写一个程序,需要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) ;

它返回错误的值,我做错了,这是一个逻辑错误还是语法?

3 个答案:

答案 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。它比较了这两个值,然后删除了布尔结果。

您可能只需要一个=