函数无法正确计算文件中的整数?

时间:2019-09-17 09:02:31

标签: 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();
}

1 个答案:

答案 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