2013-08-30 26 views
0

我試圖在文本文件「玩家」中分別讀取兩個單詞「kelly 1000」,分別導入向量玩家和餘額。不知道爲什麼它不起作用?從文本文件讀入兩個向量C++

string name = "kelly"; 
int main() 
{ 
    int num =0; 
vector<string> players; 
vector<int> balances; 
ifstream input_file("players.txt"); 
while(!input_file.eof()) 
{ 
    input_file >> players[num]; 
    input_file >> balances[num]; 
    num++; 
} 
for(size_t i = 0; i=players.size(); i++) 
{ 
    if(name==players[i]) 
     cout << "Welcome " << name << ", your current balance is " << balances[i] <<   "$." << endl; 
    else 
     break; 
} 
+0

請問您能解釋一下「它不工作」嗎?它是否編譯?鏈接?運行時崩潰?其他一些問題? –

+0

你不應該'while(!input_file.eof()){...}',它不會像你期望的那樣工作。相反,while(input_file >> p >> b){...}' –

+0

它說矢量下標超出範圍時,我調試(在input_file >>球員[編號] – Merni

回答

4

With operator[]您只能訪問現有的元素。走出界限調用未定義的行爲。你的載體是空的,你需要使用push_back方法向它們添加元素。

第二個問題是while (!file.eof())反模式。它會典型地循環一次或多次,因爲最後一個記錄的讀取不會觸發eof。當從流讀取時,總是在使用讀取值之前檢查輸入是否成功。這通常是通過在內部環路條件下使用operator>>完成的。

string temp_s; 
int temp_i; 

while (input_file >> temp_s >> temp_i) { 
    players.push_back(temp_s); 
    balances.push_back(temp_i); 
} 

這樣循環停止,如果operator>>失敗。

+0

@Merni不,我的意思是我寫。你讀過第一段嗎?你不能說在一個空載體上有'players [num]',換句話說'num'不能大於'players.size() - 1'(就像普通數組)。 – jrok

3
//Hope this is something you want dear.Enjoy 
#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <vector> 
#include <fstream> 
using namespace std; 

string name = "kelly"; 
int main() 
{ 
    int num =0; 
    string tempname; 
    int tempbalance; 
    vector<string> players; 
    vector<int> balances; 
    ifstream input_file("players.txt"); 
    while(!input_file.eof()) 
    { input_file>>tempname; 
     input_file>>tempbalance; 

     players.push_back(tempname); 
     balances.push_back(tempbalance); 

    } 
    for(size_t i = 0; i<players.size(); i++) 
    { 
     if(name==players.at(i)) 
      cout<< "Welcome " << name << ", your current balance is " << balances.at(i)<<   "$." << endl; 

    } 
    return 0; 
}