对于noob问题感到抱歉,但我是C ++的新手。
我需要从文件中逐行读取一些信息,然后执行一些计算,然后输出到另一个文件中。例如,我们读取每行的唯一ID,名称和2个数字。最后两个数字相乘,在输出文件中,ID,名称和产品逐行打印:
input.txt中:
2431 John Doe 2000 5
9856 Jane Doe 1800 2
4029 Jack Siu 3000 10
output.txt的:
ID Name Total
2431 John Doe 10000
9856 Jane Doe 3600
4029 Jack Siu 30000
我的代码与此类似,但只有第一行出现在输出文件中。如果我反复按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;
}
这是我唯一的问题,除非我反复按Enter
,否则值不会出现在输出文件中,然后关闭程序。任何人都可以建议修复上面的代码,让它在没有键盘输入的情况下完成任务吗?谢谢!
答案 0 :(得分:9)
使用
while (!cin.eof()) {
答案 1 :(得分:7)
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
你隐藏了真正的std :: cin和std :: cout ......后来会从中读取它们。
while ((c = getchar()) != EOF) {
但是在这里你使用真正的std :: cin来检查EOF。
答案 2 :(得分:6)
getchar()
调用读取等待您输入字符(并按Enter键),因为它从标准输入(标准输入)读取。尝试更改循环条件以在cin
到达文件末尾时停止读取。
修改的
您还应该为输入和输出流使用不同的名称 - cin
命名空间中已经有cout
和std
。
答案 3 :(得分:1)
这是因为你在while循环条件中使用了getchar()。不确定你要做什么,但getchar()从stdin读取一个char。你应该做的是检查cin是否失败或遇到EOF。
答案 4 :(得分:0)
虽然我正在寻找答案,但我最好检查并确保它有效。我得到了一些构建错误,并从那里得到了一点点。
希望这有帮助!
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream indata("input.txt");
if(!indata)
{ // file couldn't be opened
cerr << "Error: input.txt could not be opened" << endl;
exit(1);
}
ofstream output("output.txt");
if(!output)
{ // file couldn't be opened
cerr << "Error: output.txt could not be opened" << endl;
exit(1);
}
int ID, I, J;
char First[10], Last[10];
output << "ID\tName\tTotal\n";
while (!indata.eof())
{
indata >> ID >> First >> Last >> I >> J;
output << ID << " " << First << " " << Last << " " << I * J << endl;
}
indata.close();
output.close();
return 0;
}