我的代码中的运行时错误虽然正确

时间:2016-03-21 15:46:05

标签: c++ vector runtime-error

这是我的代码

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

int findat(string x, vector<string> &str, int np)
{
    int loc;
    for(int i=0; i<np; i++) if(x == str[i]) loc = i;
    return loc;
}


int main()
{
    int np; cin>>np; 
    vector <int> v(5);
    fill(v.begin(), v.end(), 0);
    vector <string> str; string buff;
    for(int i=0; i<np; i++) cin>>buff; str.push_back(buff);
    //Took names
    int price, no, rem;
    for(int i=0; i<np; i++)
    {
        cin>>buff;
        cin>>price>>no;
        v[findat(buff,str,np)]+=price%no;
        for(int i=0; i<no; i++)
        {
            cin>>buff;
            v[findat(buff,str,np)]+= price/no;
        }
    }

    for(int i=0; i<np; i++)
    {
        cout<<str[i]<<" "<<v[i]<<endl;
    }
}

这是USACO培训网关问题,您可以在http://www.spoj.com/problems/GIFT1/

找到

在编译程序并运行它之后,我收到运行时错误,显示我的IDE已停止工作。我想知道我在哪里出错了,以及我是否可以以某种方式删除findat()函数。

findat()函数从数组中查找礼品赠送者的位置,即数组的索引。然后我使用索引来初始化main()函数中其他礼品赠送者的数量。我是所有这一切的新手,所以请建议我如何有效地删除一些代码行。

由于

1 个答案:

答案 0 :(得分:1)

这里有一个问题:

for(int i=0; i<np; i++) cin>>buff; str.push_back(buff);

这与此相同:

for(int i=0; i<np; i++)
    cin>>buff;
str.push_back(buff);

你想要的是这个:

for(int i=0; i<np; i++) {
    cin>>buff;
    str.push_back(buff);
}