2014-01-09 54 views
0

這是我的代碼:捕獲和文件轉換蜇傷並進行數值運算

int main() 
{ 
std::ifstream myfile; 
myfile.open("ex.txt"); 
std::string a; 
while(myfile.eof()!=1) 
{ 
    getline(myfile,a,','); 
    int i = stoi(a); 
    if (!(i%2)) 
     std::cout<<a<<std::endl; 
} 

} 

基本上我有一個逗號分隔的整數的文本文件。我現在希望甚至顯示這些整數。我在Xcode,Apple LLVM上運行代碼。我得到正確的輸出,但Xcode中顯示了一些奇怪的例外:

的libC++ abi.dylib:Stoi旅館:與 類型的std :: invalid_argument的未捕獲的異常終止沒有轉換程序,退出 代碼結束:0

此消息在stoi命令中帶有一個斷點。發生了什麼?我該如何順利地做到這一點?

編輯:輸入文本文件。

5,8,4,8,0,8,4,3,0,7,8,3,6,2,9,7,3,0,9,0,1,9,2,4,5,4,9,8,4,3,0,9,3,3,5,1,1,8,6,3,4,6,8,2,0,2,6,2,1,6,6,1,9,4,1,1,2,9,3,0,3,2,3,9,4,8,0,3,2,2,6,9,1,1,8,1,0,3,6,3,0,3,2,8,6,5,0,3,7,4,3,3,6,0,1,2,2,8,2,5,1,0,0,2,8,8,3,3,8,9,2,3,6,2,5,0,2,4,6,2,6,1,0,2,6,7,1,2,1,8,5,2,2,3,4,2,7,1,7,3,3,8,9,3,2,9,9,5,1,3,4,2,2,0,1,3,0,8,3,4,7,4,5,5,6,4,0,7,8,0,1,1,8,5,2,7,4,4,6,3,4,4,8,3,4,1,1,1,9,2,5,1,3,4,2,6,4,8,7,2, 

沒有\n即改變的特價

+1

'while(myfile.eof()!= 1)'Nooooooooooooooooo –

回答

1

我相信這是與事實,你正在使用while (!eof())做。這是一個錯誤的表達,因爲它不符合IOStream的預期功能。你應該檢查是否輸入之前成功進行輸入:

while (std::getline(myfile, a, ',')) 

這樣做,否則會導致流到達的字符串a是沒有價值的檔案結尾和。然後將該空字符串傳遞給std::stoi,導致引發異常。

+0

是的,解決了它! – user3145076

0

這是一個例外,你沒有代碼來捕捉異常。

  • 添加代碼以捕捉異常

因爲std::stoi越來越無效參數它拋出。在這個的情況下,你至少有一個有保證的情況發生,那就是你最後一次循環迭代。這是因爲你正在循環輸入錯誤地,因爲已經多次被覆蓋。

不要寫while (!stream.eof())或其等價物(哪個學習資源指示你這樣做?)。 EOF設置爲,當在EOF處讀取失敗時,而不是在下一次讀取失敗時。因此你最終會遇到一個太多的getline

  • 改爲寫while (getline(...))
相關問題