函数不能正确计算文件中的整数?
Function doesn't count correctly the integers from the file?
我正在创建一个非常简单的函数,我创建了一个整数数组,在一个文件中进行了写入,然后我从同一个文件中读取并返回了文件中的值的数量。从技术上讲,该值应与数组的长度相同,但结果却不同。我在循环中进行了一些检查,但不了解问题出在哪里。
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();
}
这是标准题!
不要使用这种循环:while (!file1.eof())
它不起作用,因为你的文件以制表符结尾,而制表符不是用最后一个数字读取的,结果循环再次迭代超过它需要的次数。在上次迭代期间,选项卡被读取,但读取 val
失败,您将其视为重复值。
像这样修复它:
while (file1 >> val) {
cout << "i am val: " << val << endl;
cout << "i am conta:" << conta << endl;
conta = conta + 1;
}
它尝试读取整数值,只有在成功时才执行循环。可能有多种原因导致此循环停止:到达文件末尾、未找到整数值、IO 操作失败。
Offtopic:这个int A[len];
在标准C++
中是不允许的。它适用于大多数编译器,因为它在 C
中是允许的。在 C++ 中,建议在这种情况下使用 std::array
(因为 C++11
)或 std::vector
。
我正在创建一个非常简单的函数,我创建了一个整数数组,在一个文件中进行了写入,然后我从同一个文件中读取并返回了文件中的值的数量。从技术上讲,该值应与数组的长度相同,但结果却不同。我在循环中进行了一些检查,但不了解问题出在哪里。
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();
}
这是标准题!
不要使用这种循环:while (!file1.eof())
它不起作用,因为你的文件以制表符结尾,而制表符不是用最后一个数字读取的,结果循环再次迭代超过它需要的次数。在上次迭代期间,选项卡被读取,但读取 val
失败,您将其视为重复值。
像这样修复它:
while (file1 >> val) {
cout << "i am val: " << val << endl;
cout << "i am conta:" << conta << endl;
conta = conta + 1;
}
它尝试读取整数值,只有在成功时才执行循环。可能有多种原因导致此循环停止:到达文件末尾、未找到整数值、IO 操作失败。
Offtopic:这个int A[len];
在标准C++
中是不允许的。它适用于大多数编译器,因为它在 C
中是允许的。在 C++ 中,建议在这种情况下使用 std::array
(因为 C++11
)或 std::vector
。