我目前使用類似於文件>> vec [i]的技術來填充文件行中的值。但是,如果它試圖讀取的行不是數字,我怎麼能確定這將返回錯誤消息?應該允許採用整數和雙打,但不能像「大聲笑」或3,24,5。從C++文本文件中逐行讀取,如何確保輸入是雙精度?
0
A
回答
0
的一般模式是檢查輸入操作的結果:
double d;
if (file >> d) { vec[i] = d; }
else { /* error (now you must handle this before trying again) */ }
如果出現錯誤,你必須對一些政策的下一步該怎麼做決定 - 跳過它以某種方式,終止程序等
0
通常情況下,你可以只檢查失敗位的讀取後:
cin>>d;
if(cin.fail())
// we failed! Print an error!
或者是這樣的:
if (not (cin>>d))
// we failed! Print an error!
但是,如果您有很多讀取操作,那麼您可能會很煩惱,因爲每次讀取後都會處理錯誤。
或者,您可以打開在cin
拋出異常失敗的選項:
cin.exception(std::ios::failbit);
//...
cin>>d; // will throw on failure
0
我怎麼能相信,這將返回一個錯誤信息,如果它試圖讀取該行不是一個數字?
一種常見的技術是在輸入完成後將流位設置爲異常掩碼。然後,您可以按照自己的喜好執行清理(或重新拋出異常):
file.exceptions(std::ios_base::goodbit);
while (file >> x)
{
// ...
}
try { file.exceptions(std::ios_base::badbit |
std::ios_base::failbit | std::ios_base::eofbit); }
catch(std::ios_base::failure&)
{
if (file.rdstate() & std::ios_base::failbit)
// ...
if (file.rdstate() & std::ios_base::badbit)
// ...
if (file.rdstate() & std::ios_base::eofbit)
// ...
}
相關問題
- 1. 從文本文件逐行讀取C++
- 2. 如何從C++中的文件中讀取雙精度值
- 3. 從文件中讀取雙精度
- 4. C++從二進制文件中寫入和讀取雙精度
- 5. 從java中的文本文件中讀取雙精度
- 6. C++從文本文件讀取雙行
- 7. 如何逐行讀取文本文件?
- 8. 如何逐行讀取文本文件?
- 9. 從C文件中逐行讀取
- 10. android - 從文本文件逐行讀取
- 11. 從c中的二進制文件讀取雙精度值
- 12. 如何從文本文件中將逗號分隔的雙精度讀入MATLAB?
- 13. 如何從文件中讀取雙精度值?
- 14. Android:從文本文件中讀取雙精度並將它們放入數組
- 15. C++逐行讀取文件
- 16. C++從文本文件讀取雙打
- 17. 如何從txt文件中逐字符讀取字符並逐行讀取C++
- 18. 如何從vb 6中逐行讀取文本文件內容?
- 19. 如何確保輸入是C編程語言中的雙精度
- 20. 如何從.txt文件讀取雙精度到一個ArrayList
- 21. 如何從Python中的多行Tkinter文本框中讀取輸入(逐行)?
- 22. 逐行讀取文件,逐字符C
- 23. 從shell腳本逐行讀取文件
- 24. 從文件中逐行逐行讀取C
- 25. 我如何從一個文件讀取到Allegro C++中的雙精度?
- 26. 逐行讀取文本文件並從緩衝區掃描 - C
- 27. 如何從FTP服務器上逐行讀取文本文件?
- 28. 如何逐行讀取uitextview文本行?
- 29. 將文本文件輸入分配給雙精度數組
- 30. 在c中逐行讀取文件#
這不會修復像'2,4334nnngadfj4'這樣的輸入。它只是使用'2'。 – user2946291
@ user2946291:是的,但您會在下一輪看到。或者,如果你使用linewise串流,你可以添加'>> std :: ws',然後檢查沒有其他東西。 –