我必须使用fstream
创建一个.txt
文件,并在其中写入0到10,然后再次使用fstream
读取该文件并将所有整数相加,然后将总和输出到控制台。
我不知道我在哪里犯了一个错误:
fstream myFile;
myFile.open("numbers.txt", ios::in | ios::out);
int sum = 0;
int number = 0;
string line;
if (myFile.is_open()) {
for (int i = 0; i <= 10; i++) {
myFile << i;
}
myFile.seekp(0, ios::beg);
while (getline(myFile, line)) {
myFile >> number;
sum += stoi(line);
}
}
cout << "Sum: " << sum << endl;
return 0;
我尝试了getline()
和其他方法,但都不起作用。
2条答案
按热度按时间bxjv4tth1#
您将数字写入文件时,它们之间没有任何分隔符,因此文件中将包含一个长数字序列,即
012345678910
。无论您如何阅读,您都无法理解它。因此,将数字分开以使其更容易阅读。更重要的是,在写入文件并寻求(output 位置)到开头(而不是寻找 input 位置),然后调用
getline()
将 * 整个文件 * 读取到std::string
中,然后尝试将整个string
转换为int
,但是012345678910
的值超过了int
可以容纳的最大值(2147483647
),所以stoi()
将失败。你可以试试这个:
Online Demo
但是,请注意,当您打开文件时,您同时指定了
in
和out
标志。(即使它是空的)。所以,如果你需要创建一个新的文件,in
标志一定不能指定,但这样你就不能从文件中读取,请参阅std::basic_filebuf::open()
的this documentation以了解原因。因此,您必须打开文件进行写入,然后关闭并重新打开它进行阅读,例如:
Online Demo
在这种情况下,您应该分别使用
ifstream
和ofstream
,而不是使用fstream
,例如:Online Demo
wvyml7n52#
有两个错误。
1.当您在阅读和写入同一文件之间切换时,必须在两者之间插入一个查找操作。
1.同时使用
getline(myFile, line)
和myFile >> number;
是没有意义的,必须去掉其中一个。Demo。
PS:问题已更改,此答案可能对当前状态有效,也可能无效。