我想知道是否可以在文本文件中跳轉位置。 假設我有這個文件。高級文件指針跳過文件中的數字
12
8764
2147483648
2
-1
每當我試着讀第三個數字就不會閱讀,因爲它比32位int.So每當我到達第三個數字的最大數量較大的,它使讀取第二一遍又一遍。我怎樣才能跳到第四個數字?
我想知道是否可以在文本文件中跳轉位置。 假設我有這個文件。高級文件指針跳過文件中的數字
12
8764
2147483648
2
-1
每當我試着讀第三個數字就不會閱讀,因爲它比32位int.So每當我到達第三個數字的最大數量較大的,它使讀取第二一遍又一遍。我怎樣才能跳到第四個數字?
使用std ::函數getline,而不是運營商>>(的std :: istream的,INT)
std::istream infile(stuff);
std::string line;
while(std::getline(infile, line)) {
int result;
result = atoi(line.c_str());
if (result)
std::cout << result;
}
原因您遇到你的行爲,就是當的std :: istream的嘗試(並失敗)閱讀一個整數,它設置了一個「badbit」標誌,這意味着出了問題。只要badbit標誌保持設置,它根本不會做任何事情。所以它實際上並沒有重新閱讀,沒有做任何事情,只留下那裏的價值。如果你想保持更符合你已有的東西,它可能就像下面。上面的代碼雖然簡單,但不易出錯。
std::istream infile(stuff);
int result;
infile >> result; //read first line
while (infile.eof() == false) { //until end of file
if (infile.good()) { //make sure we actually read something
std::cout << result;
} else
infile.clear(); //if not, reset the flag, which should hopefully
// skip the problem. NOTE: if the number is REALLY
// big, you may read in the second half of the
// number as the next line!
infile >> result; //read next line
}
因爲'atoi'對'std :: string'有重載嗎? –
我真的希望它做到了,雖然... –
如果願望是消息來源... –
您可以先讀取該行,然後將該行轉換爲整數(如果可以的話)。這裏是爲您的文件的例子:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
int main()
{
std::ifstream in("file");
std::string line;
while (std::getline(in, line)) {
int value;
std::istringstream iss(line);
if (!(iss >> value)) {
std::istringstream iss(line);
unsigned int uvalue;
if (iss >> uvalue)
std::cout << uvalue << std::endl;
else
std::cout << "Unable to get an integer from this" << std::endl;
}
else
std::cout << value << std::endl;
}
}
我認爲istringstream(因爲它是「更正確」),但我決定,因爲他只顯示有數字,它使用atoi更快,更簡潔。如果他有更多的數字,那麼這是更好的答案。另外,他似乎只關心有符號的32位範圍內的值,所以內部'iss'可以被刪除。 –
作爲替代使用std::getline()
,你可以調用std::ios::clear()
。您可以考慮previous question
fin >> InputNum;
此摘錄你可以用這個替換代碼:
fin >> InputNum;
if(!fin)
fin.clear();
它是使用較長的整數的選項? –