空間我有一個看起來像這樣良好的輸入文件:混亂與FILEIO
734 220 915 927 384 349 79 378 593 46 2 581 500 518 556 771 697
571 891 181 537 455
和壞輸入文件看起來像這樣:
819 135 915 927 384 349 79 378 593 46 2 581 500 518 556 771 697
551 425 815 978 626 207 931 ABCDEFG 358 16 875 936 899 885 195 565
571 891 181 537 110
那裏是最後一個整數以下的空間在兩個文件的末尾。我試圖用C++編寫一個腳本,它將讀取所有整數,除非第二個例子中有一個字符/字符串,在這種情況下,它會提醒我這一點。我試圖把它寫這樣的:
int main()
{
int n;
bool badfile = false;
ifstream filein("data.txt");
while (!filein.eof())
{
filein >> n;
if(filein.fail())
{
cout << "Not an integer." << endl;
badfile = true;
break;
}
cout << n << " ";
}
cout << endl << "file check: " << badfile << endl;
}
但filein.fail()
是在一個良好的文件末尾的空間,以及在一個壞的文件中的字符/串觸發。那麼我怎樣才能設置它以忽略空白?爲什麼只有在最後有一個空間而不是在所有空間都失敗或者完全忽略它們時纔會失敗?
嗯..這個工作,但我真的不明白因爲它使用std中比我迄今爲止學到的更先進的東西。有沒有更基本的方法來做到這一點?此外,我仍然困惑,爲什麼它首先導致問題。我更多地將它作爲一個初學者在fileIO中的學習練習,而不是試圖找到一個快速修復的工具。 – Austin
@AustinMW:有更多的細節爲什麼'while(!in.eof())'被打破[這裏](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-條件考慮的,是錯誤的)。還有另一種方法,您可能會也可能不會找到更簡單的方法,我會將其添加以供您考慮。乾杯。 –