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

标签 c++ ifstream ofstream

<分区>

我正在制作一个非常简单的函数,其中我制作了一个整数数组,我在一个文件中进行了写入,然后我从同一个文件中读取并返回放入该文件的值的数量。从技术上讲,该值应与数组的长度相同,但结果却不同。我在循环中进行了一些检查,但不了解问题出在哪里。

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

关于c++ - 函数不能正确计算文件中的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57970839/

相关文章:

c++ - WinAPI - 避免重绘窗口

c++ - boost::asio 将动态大小的数据传递给异步处理程序时出现问题

c++ - 如何一次从文件中读取两个十六进制值

c++ - ifstream 不会在下一次迭代中打开文件

c++ - 用c++写入文本文件的开头

c++ - 在数学上添加两个字符串?

C++ 并行编程函数调用

c++ - C++中的ifstream

c++ - 删除boost归档对象还会删除与其关联的流吗?

c++ - 直接用rapidjson保存json到文件