gpt4 book ai didi

c++ - 使用seekg()读取C++文件中的问题

转载 作者:行者123 更新时间:2023-12-02 10:13:25 25 4
gpt4 key购买 nike

我正在学习在C++中读写文件并发现问题。
我的test.txt文件在3行中包含3个字符串:

abc
def
mnp
我的问题是:我不明白为什么我需要使用 f.seekg(2, ios::cur);代替 f.seekg(1, ios::cur);我知道如何在C++中使用 seekg(),我认为我只需要忽略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;

最佳答案

例如,在此处说明造成麻烦的原因:
Why does std::getline() skip input after a formatted extraction?
但是关于您的实际问题seekg。您以文本模式打开文件。这意味着,当您读取文件时,换行符将以单个字符'\n'的形式提供给C++代码。但是在磁盘上,它们可能是其他东西,看来您正在Windows上运行代码。文本文件中的换行符通常为两个字节,CR(ASCII代码13)和LF(ASCII代码10)。在文本模式下读写将为您在C++字符串中的单个字符与文件中的两个字节之间执行此转换。seekg可以处理偏移量,因此无需担心,无论您以文本还是二进制模式打开文件,偏移量都是相同的。如果使用seekg跳过新行,则代码将取决于平台,在Windows上,如上所述,您需要跳过2个字节,而在其他平台(如Unix)上,您只需跳过单个字节。
因此,请勿为此使用seekg,请参阅链接的问题以获取更好的解决方案。

关于c++ - 使用seekg()读取C++文件中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62730159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com