所以我正在使用while循環讀取文本文件中的數據。使用while循環讀取文本文件中的數據
我原本代碼中設置了這種方式:
iftream infile;
while(infile) // or even if i do while(!infile.eof())
{
infile>>data;
vector1.push_back(data); //adding data in to the vector
}
- 但這導致其在最後一個項目在文本文件中由於某種原因,讀兩遍一個小問題。
但如果我有這種方式設置的一切代碼工作正常:
iftream infile;
while(infile>>data)
{
vector1.push_back(data); //adding data in to the vector
}
爲什麼第一個代碼在過去的項目中,讀兩次?
它不讀取最後一個項目兩次。相反,你忽略了*最後一次讀取* **失敗**的事實,然後盲目插入最後一次成功迭代的讀取。通過測試提取的成功作爲循環的條件,你可以避免這個問題。簡而言之,在使用它們之前驗證您的提取(您的第二個代碼段和第一個代碼段不會*)*。 – WhozCraig
@WhozCraig甚至第一個片段..它應該跳過while循環,當它看到沒有什麼可讀的,對吧? while(!infile.eof())意味着它只會做循環,只要它不是文件的結尾..但是一旦它的文件結束,它應該跳過循環吧? – psj01
不完全。鏈接副本是老實說,你會得到最好的描述,你爲什麼不簡單地在循環控制條件中使用eof或eof-logic。表達式'inifile'與'!inifile.fail()'是同義的,只要不設置壞位和失敗位,它就是真的。既然還沒有設置(你沒有嘗試讀* *超出* eof並且沒有發生其他故障),表達式仍然是正確的。 – WhozCraig