函数不能正确计算文件中的整数?

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