简单的菜鸟I/O问题(C++)

Zac*_*ach 2 c++ cout input cin

对于noob问题感到抱歉,但我是C++的新手.

我需要从文件中逐行读取一些信息,然后执行一些计算,并输出到另一个文件中.例如,我们读取每行的唯一ID,名称和2个数字.最后2个数字相乘,在输出文件中,ID,名称和产品逐行打印:

input.txt中:

2431 John Doe 2000 5
9856 Jane Doe 1800 2 
4029 Jack Siu 3000 10
Run Code Online (Sandbox Code Playgroud)

output.txt的:

  ID     Name Total
2431 John Doe 10000
9856 Jane Doe 3600
4029 Jack Siu 30000
Run Code Online (Sandbox Code Playgroud)

我的代码与此类似,但只有第一行出现在输出文件中.如果我Enter反复按,输出文件中会出现其他行:

#include <fstream>
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

int main () {

    int ID, I, J;
    string First, Last;
    char c;

    cout << "ID\tName\t\Total\n";

    while ((c = getchar()) != EOF) {
        cin >> ID >> First >> Last >> I >> J;
        cout << ID << " " << First << " " << Last << " " I * J << "\n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我唯一的问题,这些值不会出现在输出文件中,除非我Enter反复按,然后关闭程序.任何人都可以建议修复上面的代码,让它在没有键盘输入的情况下完成任务吗?谢谢!

Edw*_*nge 7

using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");
Run Code Online (Sandbox Code Playgroud)

你已经隐藏了真正的std :: cin和std :: cout ......并且稍后会从中读取它们.

while ((c = getchar()) != EOF) {
Run Code Online (Sandbox Code Playgroud)

但是在这里你使用真正的std :: cin来检查EOF.


Amn*_*non 6

getchar()调用读取等待你输入一个字符(和按Enter键),因为它从标准输入(标准输入)读取.尝试更改循环条件以在cin到达文件末尾时停止读取.

编辑 您还应该为输入和输出流使用不同的名称 - 已经存在cin并且coutstd命名空间中.