使用seekg()读取C++; 我正在学习C++中的文件读写,发现问题。

使用seekg()读取C++; 我正在学习C++中的文件读写,发现问题。,c++,seekg,C++,Seekg,我的test.txt文件包含3行中的3个字符串: abc def mnp 我的问题是:我不明白为什么我需要使用f.seekg(2,ios::cur) 而不是f.seekg(1,ios::cur) 我知道如何在C++中使用 Sekg[()),我认为我只需要忽略1字节。 通过getline()函数获取下一行 这是我的代码: ifstream f; f.open("D:\\test.txt", ios::in); string str1, str2, str3;

我的test.txt文件包含3行中的3个字符串:

abc
def
mnp
我的问题是:我不明白为什么我需要使用
f.seekg(2,ios::cur)
而不是
f.seekg(1,ios::cur)
我知道如何在C++中使用<代码> Sekg[())<代码>,我认为我只需要忽略1字节。
通过
getline()
函数获取下一行

这是我的代码:

ifstream f;
    f.open("D:\\test.txt", ios::in);
    string str1, str2, str3;
    f >> str1;
    f.seekg(2, ios::cur);
    getline(f, str2);
    getline(f, str3);
    cout << str1 << " " << str2 << " " << str3 << endl;
iff流;
f、 打开(“D:\\test.txt”,ios::in);
字符串str1、str2、str3;
f>>str1;
f、 seekg(2,ios::cur);
getline(f,str2);
getline(f,str3);

cout这里举例说明了您遇到麻烦的原因:

但是,关于
的实际问题,请参见kg
。您可以在文本模式下打开文件。这意味着,当读取文件时,将行提要作为单个字符给出,C++代码> \n′/COD>。但是在磁盘上,它们可能是其他的东西,看起来您正在上面运行代码。文本文件中的换行符通常是两个字节,CR(ASCII代码13)和LF(ASCII代码10)。在文本模式中读或写将执行C++字符串中的单个字符与文件中的两个字节之间的转换。

seekg
适用于偏移量,并不关心这一点,无论以文本或二进制模式打开文件,偏移量都是相同的。如果您使用
seekg
跳过新行,您的代码将取决于平台,在Windows上,您需要如上所述跳过2个字节,而在其他平台(如Unix)上,您只需要跳过一个字节


因此,不要为此使用
seekg
,请参阅链接问题以获得更好的解决方案。

您根本不必寻找代码为什么会说
2
?你从哪里弄来的?当你问他们时,作者是怎么说的?谢谢你的回答。太有用了@婴儿学数学没问题。请注意,在这里说“谢谢”的通常方式是对答案投赞成票。此外,当你的问题得到满意的答案时,最好接受你最喜欢的答案(但如果你想让所有时区都有机会看到和回答你的问题,最好等24小时)。