【发布时间】:2012-10-06 18:45:58
【问题描述】:
我有一个任务要求
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;
}
【问题讨论】:
-
是的,但我不确定它应该是什么扩展......?如果那有意义的话。我有 abc.txt 但它什么也没做。我在同一根文件夹下看到名为“core”(文件)和“a.out”(OUT 文件)的其他文件,我应该相应地编辑它们吗?
-
那你的问题;你告诉你的程序输入文件是
abc,但它是abc.txt。 -
lol dang,好吧,我尝试输入“abc.txt”,但仍然遇到相同的运行时错误。然后我继续复制“Core”并将其重命名为“abc”,以及其他三个文件,所以我的输入 1 是 abc,输入 2 是 yes,输出是 hola。现在腻子实际上正在做某事,我确定它卡在了 while 循环中。
-
除非您知道自己在做什么,否则您可能不想使用
core作为输入文件;core是一个二进制调试转储,几乎可以肯定不会与您的任何其他文本文件对齐。 -
啊,好吧,明白了。核心实际上是在我的根文件夹本身上弹出的。难怪它从 3mb 开始就永远使用 Putty。由于我不断收到 abc.txt 相同的运行时错误,我应该使用哪种类型的文件扩展名?