[英]Checking for valid input C++
這里的基本問題。 我正在讀取文件,並將文件中的值寫入無符號整數,如下所示:
// The essential stuff
std::ifstream infile(filePath.c_str());
std::getline(infile, line);
std::istringstream in(line);
char type;
in >> type;
unsigned int x, y, z, w;
in >> x >> y >> z >> w; // My question relates to this here.
這是問題所在:獲得x,y,z和w的值可以正常工作,但我希望w
是可選的。 因此,一行可能包含f 0 1 2 3
(類型,加上4個值),或者可能僅包含f 0 1 2
。
天真地,我希望w
等於EOF或類似的東西,但是可惜,事實並非如此。
我可以計算行中的空格,並使用它來檢查w
存在。 或者,我可以使用peek
來檢查行是否在z之后結束,但這並不是那么簡單,因為我也想忽略空格(即z和w字符之間可能有10個空格,並且應該仍然有效)。 因此,肯定存在解決方案,但是我想知道是否存在……某種更簡潔的方法? 大概是這樣嗎?
writeTo(w);
if w is junk
disposeOf(w);
分兩個步驟進行:
if (in >> x >> y >> z)
{
mandatory_stuff(x, y, z);
if (in >> w)
{
optional_stuff(w);
}
}
else
{
// malformed input
}
當輸入運算符失敗時,它將流設置為失敗狀態,即,它在流中設置狀態標志std::ios_base::failbit
。 設置此標志后,流將轉換為false
,即,您可以使用流查看輸入是否成功:
if (in >> x >> y >> z) {
if (in >> w) {
deal_with_all_for_values(x, y, z, w);
}
else {
deal_with_only_the_first_tree(x, y, z);
}
}
僅當讀取操作成功時才設置大多數值,即,如果您要給w
一個特殊的值,則可以讀取該值,如果不存在,它將保留其原始值:
int w = 17;
if (in >> x >> y >> z) {
in >> w;
deal_with_the_values(x, y, z, w);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.