0

我有一个任务要求

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;
}
4

1 回答 1

0

你的程序没问题,但你需要确保你输入了整个文件名,包括文件扩展名。我能够使用这些文件成功运行您的程序:

  • program.cc——你的程序源
  • program— 你的程序,编译
  • file-a.txt— 一个文本文件:

    Hello, world!
    This is a file.
    This line is different.
    But same again.
    
  • file-b.txt— 另一个文本文件:

    Hello, world!
    This is a file.
    This line differs from file A.
    But same again.
    

然后我能够成功运行您的程序:

$ ./program
Please enter input file name: file-a.txt
Please enter another input file name: file-b.txt
Please enter name of output file: diffed.txt

diffed.txt它使用以下输出成功创建:

1: OK
2: OK
3: DIFF
4: OK
于 2012-10-06T19:27:56.937 回答