2013-05-17 69 views
1

我試圖從文本文件中獲取輸入,並使用getline()將數據放入四個向量中。該文件包含兩個字符串,一個double和一個整數,全部位於不同的行上,每個組由一個空行分隔。getline()和向量問題(C++)

if (userChoice == 1) // Load 
      { 
       in_stream.open("Lab11.txt"); 
       if (in_stream.fail()) 
       { 
        cerr << "File does not exist" << endl; 
        system("PAUSE"); 
        exit(1); 
       } 
       index = 0; 
       do 
       { 
        getline(in_stream, itemNumb[index]); 
        getline(in_stream, itemName[index]); 
        getline(in_stream, itemCost[index]); 
        getline(in_stream, itemQuant[index]); 
        index++; 
       } while (! in_stream.eof()); 
       in_stream.close(); 
       itemStored = 0; 
       cout << "Items stored: " << itemStored << endl; 
      } 

itemNumb和itemName是字符串矢量,itemCost是double,itemQuant是整數。字符串的行不會給出錯誤,但double和整數的行會給出相同的錯誤,並且類型會根據哪個向量發生更改。

錯誤:

no matching function for call to getline(std::ifstream&, double&)'|

任何幫助將不勝感激! 編輯:全碼

#include <iostream> 
    #include <cstdlib> 
    #include <fstream> 
    #include <vector> 
    #include <string> 
    #include <sstream> 

    using namespace std; 

    void Add(vector<string>& itemNumb, vector<string>& itemName, vector<double>& itemCost, vector<int>& itemQuant, string name, string numb, double cost, int quant, int length, int index); 

    void Search(vector<string>& itemNumb, vector<string>& itemName, vector<double>& itemCost, vector<int>& itemQuant); 

    void List(vector<string> itemNumb, vector<string> itemName, vector<double> itemCost, vector<int> itemQuant, int length, int index); 

    int main() 
    { 
     ifstream in_stream; 
     ofstream out_stream; 
     vector<string> itemName, itemNumb; 
     vector<double> itemCost; 
     vector<int> itemQuant; 
     string name = "000", numb = "000"; 
     double cost = 0.0; 
     int quant = 0, length = 0, index = 0; 
     int userChoice, itemStored; 
     do 
     { 
      cout << "===========================" << endl << "1) Load" << endl << "2) Add" << endl << 
    "3) Search" << endl << "4) List" << endl << "5) Save" << endl << endl << "0) Exit" << endl; 
      cout << "Choose an option" << endl; 
      cin >> userChoice; 
      if (userChoice == 1) // Load 
      { 
       in_stream.open("Lab11.txt"); 
       if (in_stream.fail()) 
       { 
        cerr << "File does not exist" << endl; 
        system("PAUSE"); 
        exit(1); 
       } 
       index = 0; 
       do 
       { 
        getline(in_stream, itemNumb[index]); 
        getline(in_stream, itemName[index]); 
        in_stream >> itemCost[index]; 
        in_stream >> itemQuant[index]; 
        index++; 
       } while (! in_stream.eof()); 
       in_stream.close(); 
       itemStored = itemNumb.size(); 
       cout << "Items stored: " << itemStored << endl; 
      } 
      else if (userChoice == 2) // Add 
      { 
       Add(itemNumb, itemName, itemCost, itemQuant, name, numb, cost, quant, length, index); 
       itemStored++; // Function seems to sort oddly when strings of varying lengths are compared 
       cout << endl; 
       cout << itemStored << " items stored" << endl; 
       cout << endl; 
      } 
      else if (userChoice == 3) // Search 
      { 
       Search(itemNumb, itemName, itemCost, itemQuant); 
      } 
      else if (userChoice == 4) //List 
      { 
       List(itemNumb, itemName, itemCost, itemQuant, length, index); 
      } 
      else if (userChoice == 5) //Save 
      { 
       out_stream.open("Lab11.txt", ios::app); 
       if (out_stream.fail()) 
       { 
        cerr << "File does not exist" << endl; 
        system("PAUSE"); 
        exit(1); 
       } 
       index = 0; 
       length = itemNumb.size(); 
       while (index != length) 
       { 
        out_stream << endl; 
        out_stream << itemNumb[index] << endl; 
        out_stream << itemName[index] << endl; 
        out_stream << itemCost[index] << endl; 
        out_stream << itemQuant[index] << endl; 
        index++; 
       } 
       out_stream.close(); 
      } 
     } 
     while (userChoice != 0); 
    } 

編輯文件IO的線,導致運行錯誤

do 
    { 
     getline(in_stream, tempstr1); 
     itemNumb.push_back(tempstr1); 
     getline(in_stream, tempstr2); 
     itemNumb.push_back(tempstr2); 
     in_stream >> tempdoub; 
     itemCost.push_back(tempdoub); 
     in_stream >> tempint; 
     itemQuant.push_back(tempint); 
     index++; 
    } while (! in_stream.eof()); 
    in_stream.close(); 

回答

1

std::getline第二個參數可能是唯一std::basic_string<...>。要閱讀intdouble你應該使用重載operator>>這樣的:

in_stream >> itemCost[index] >> itemQuant[index]; 
+0

我把它改成你放什麼,但現在,如果語句導致程序崩潰。 –

+0

你能發佈完整的代碼嗎?也許,向量中沒有足夠的空間? – soon

+0

所有這一切都不會,但過去應該不會對它產生影響。 –