【发布时间】:2020-08-10 13:30:11
【问题描述】:
我的代码在 argc 为 1 时运行良好,但当我尝试从文件读取和写入时(当 argc 为 3 时) 该程序运行不正常。 Gcalc 获取 ostream(输出文件或 cout)和输入文件中的当前行 或 cin 并将字符串解码为 gcalc 数据上的命令。
#include <ostream>
#include <fstream>
#include <string>
#include <iostream>
#include "Gcalc.h"
using namespace std;
int main(int argc, char* argv[]) {
Gcalc gcalc;
string current_line;
ifstream input;
ofstream output;
if (argc != 1 && argc != 3) {
return 0;
}
if (argc == 3) {
input = ifstream(argv[1]);
cin.rdbuf(input.rdbuf());
output = ofstream(argv[2]);
cout.rdbuf(output.rdbuf());
}
while (cin.good()) {
if (argc == 1) {
cout << "Gcalc> ";
}
getline(cin, current_line);
try {
gcalc.implementCommand(cout, current_line);
}
catch (Quit_Program& error) {
break;
}
catch (std::bad_alloc& error) {
std::cerr << "Error: fatal error - bad allocation" << endl;
break;
}
catch (Exception& error) {
cout << error.what() << endl;
}
}
return 0;
}
【问题讨论】:
-
“程序运行不正常”不是一个好的错误描述。我确信程序正在这样做,正如代码所说的那样。
-
OT:您可能可以像这样将
getline(cin, current_line)移动到while 的条件中:while (getline(cin, current_line)) {... -
我的建议是将所有代码放在 while() 循环中的函数中,该函数具有 1 个参数,该参数是通过引用传递的 istream。这样您就可以传递
cin或打开的文件。 -
你为什么要这样做 argc != 1 ???
-
@ΦXocę웃Пepeúpaツ 如果提供的参数数量不正确,则退出程序。
标签: c++