我有一个任务要求
a.) Prompts the user to input the names of 3 files: two input files
and an output file.
b.) Reads in the two input files line by line and compares the two
lines.
c.) For each line in the inputs, the output should have the line
number, a colon (':'), and either "OK" if the lines match or "DIFF" if
the lines are different.
The input files may be of different lengths.
- Your program should be case-sensitive, so you do NOT need to worry about converting
text to lowercase or uppercase.
For example:
input1:
abc
def
g h i
input2:
abc
DEf
ghi
uub
output:
1:OK
2:DIFF
3:DIFF
4:DIFF
基本上我已经编写了代码,但是每次我尝试在 Putty 上运行它时,它都能正确编译。
:: a.out
Please enter input file name: abc
terminate called after throwing an instance of 'std::runtime_error'
what(): Can't open input file: abc
Abort (core dumped)
所以在我输入我的文件名之前,它得到了返回错误,我根据 Stroustrup 的书写了我输入和输出的每一部分。我到底错过了什么,或者我只是做错了?谢谢你。
#include "std_lib_facilities_3.h"
int main()
{
//Input 1
cout << "Please enter input file name: ";
string name;
cin >> name;
ifstream ist1(name.c_str());
if (!ist1) error("Can't open input file: ",name);
//Input 2
cout << "Please enter another input file name: ";
string name2;
cin >> name2;
ifstream ist2(name2.c_str());
if (!ist2) error("Can't open input file name: ",name2);
//Output
cout << "Please enter name of output file: ";
string oname;
cin >> oname;
ofstream ost(oname.c_str());
if (!ost) error("Can't open output file: ",oname);
string s, t;
int i = 1;
int flag = 1;
while(true)
{
if (!getline(ist1, s)) {flag = 1; break;}
if (!getline(ist2, t)) {flag = 2; break;}
ost << i;
if (s == t)
ost << ": OK\n";
else
ost << ": DIFF\n";
i++;
}
if (flag == 2) {
ost << i << ": DIFF\n";
i++;
while (getline(ist1, s)) {ost << i << ": DIFF\n"; i++;}
}
if (flag == 1) {
while (getline(ist2, t)) {ost << i << ": DIFF\n"; i++;}
}
return 0;
}