我正在做一个非常简单的函数,我创建了一个整数数组,在文件中进行了写操作,然后从同一文件中读取并返回了放置在文件中的值的数量。从技术上讲,该值应与数组的长度相同,但是结果不同。我在循环中放了一些提示,但不了解问题可能出在哪里。
int len = 5;
int main()
{
int A[len];
for (int i = 0; i < len; i = i + 1) {
cout << "insert a value: " << endl;
cin >> A[i];
}
ofstream file;
file.open("trial.txt");
for (int i = 0; i < len; i = i + 1) {
file << A[i] << '\t';
}
file.close();
ifstream file1;
file1.open("trial.txt");
int val;
int conta = 0;
cout << "count before while" << conta << endl;
while (!file1.eof()) {
file1 >> val;
cout << "i am val: " << val << endl;
cout << "i am conta:" << conta << endl;
conta = conta + 1;
}
cout << "i am conta after while: " << conta << endl;
cout << "the value should be 5: " << conta; //instead it shows 6
file1.close();
}
答案 0 :(得分:4)
这是标准问题!
不要使用这种循环:while (!file1.eof())
这不起作用,因为您的文件以制表符结尾,而制表符没有最后一个数字读取,因此循环再次迭代,需要更多。在上一次迭代过程中,读取了选项卡,但是读取val
失败,您会看到它是重复的值。
像这样修复它:
while (file1 >> val) {
cout << "i am val: " << val << endl;
cout << "i am conta:" << conta << endl;
conta = conta + 1;
}
它尝试读取整数值,并且仅在成功时才对循环进行精确处理。弯腰此循环可能有多种原因:到达文件末尾,找不到整数值,IO操作失败。
离题:标准int A[len];
中不允许使用此C++
。由于C
中允许使用,因此它可在大多数编译器中使用。在C ++中,建议在这种情况下使用std::array
(自C++11
起)或std::vector
。