为什么我需要用c ++进行基本阅读?

时间:2019-07-17 13:32:00

标签: c++14

我一直在和我的教授来回交流,讨论为什么在c ++中不需要或不需要素读。

#include <iostream>
#include <fstream>

int addFunct(int& total, int& rNum);

int subFunct(int& total, int& rNum);


int main() {

    char op1;

    int rNum = 0;

    int total = 0;


    std::ifstream inFile;

    inFile.open("C:\\Users\\Administrator\\Desktop\\c++ files\\input.txt");
    if (inFile.fail()) {

        std::cout << "no read";
    }


    do {

        inFile >> op1 >> rNum;
        if (op1 == '+') {

            addFunct(total, rNum);

        }

        else if (op1 == '-') {

            subFunct(total, rNum);
        }

    }

    while (!inFile.eof());     //super while loop


    inFile.close();

    std::cout << "El total es: " << total;

    return 0;


}

int addFunct(int& total, int& rNum) {

    total = total + rNum;


    return total;

}

int subFunct(int& total, int& rNum) {

    total = total - rNum;

    return total;

}

如果我在我的DO语句上方放置素数读取(例如inFile >> op1 >> rNum;),那么将不会读取文件中的最后一个值。但是,我的教授认为,启动阅读很重要且必要。我想知道为什么会这样,以及如何解决对最近读入的号码不执行操作的问题。

2 个答案:

答案 0 :(得分:3)

  

为什么我需要用c ++进行基本阅读?

你没有。

  

但是,我的教授认为,引发阅读是重要和必要的。

您是否要求他们提供解释?还是他们只是这么说而拒绝解释?


详细说明-您和您的教授的方法都是错误的。两者都是因为它们使用std::fstream::eof作为循环条件,即almost always wrong

您应该做的就是将读数移至循环条件,如下所示:

while (inFile >> op1 >> rNum) {
    if (op1 == '+') {
        addFunct(total, rNum);
    }
    else if (op1 == '-') {
        subFunct(total, rNum);
    }
}

这样,您将不会丢失文件中的任何数据。由于文件结尾或无法将文件内容解析为char后跟int的原因,一旦读取失败,您也将不会正确进入循环。

之所以可行,是因为如果>>读取失败,它将设置关联流的某些失败位。然后,>>运算符返回隐式可转换inFile的流本身(在这种情况下为bool)。如果未设置故障位,则求值为true,否则为false

答案 1 :(得分:0)

Priming read 只是在第一次测试条件时加载 while 循环。我认为教授认为这很重要,因为这是为结构化编程和流程图设置 while 循环的标准方法。

相关问题