int main(int argc, char* argv[]) //用cmd传参的方法输入数据 { if (strcmp(argv[1],"-f") == 0) //"-f" 用文件输入输出 { freopen(argv[2],"r",stdin); freopen(argv[3],"w",stdout); string str; while (cin >> str) { /*定义在循环内,缩小变量作用域,代替每次的初始化,避免造成多次输出留下问题 */ Scan get_scanf; Print put_printf; get_scanf.ToStringQueue(str); CheckInput *ck = new CheckInput; get_scanf.ErrorType += ck->CheckIfCorrect(get_scanf.que); //存入输入错误类型 if (get_scanf.ErrorType == "") //判断输入是否合法,无错误类型则合法 { Calculation *cal = new Calculation; cal->Calculate(get_scanf.que); //计算 put_printf.PrResult(cal->result); delete cal; } else { put_printf.PrErTpye(get_scanf.ErrorType); //输出计算结果 } str = ""; delete ck; } }
int main(int argc, char** argv) { string input; string parameter; double result; queue<string> seperatedExpression; Scan scan; Calculation cal; Print print; parameter = argv[1]; cout << setprecision(precision); if (parameter == "-a") //输入参数为 -a 的情况,输出表达式 { input = argv[2]; seperatedExpression = scan.ToStringQueue(input); if (seperatedExpression.front() == "ERROR") //若返回字符串为 ERROR 则报错并退出循环 { print.PrintLengthError(); return 0; } result = cal.Calculate(seperatedExpression); print.PrintA(input,result); } else if (parameter == "-f") //输入参数为 -f 的情况,对文件进行读写 { if (scan.Open(argv[2]) && print.Open(argv[3])) { while (!scan.IsEOF()) //循环读入每行,计算和写入文件 { result = 0; while(!seperatedExpression.empty()) { seperatedExpression.pop(); } scan.Read(); if (scan.GetInput() == "") { continue; } seperatedExpression = scan.ToStringQueue(scan.GetInput()); if (seperatedExpression.front() == "ERROR") { print.PrintLengthError(); continue; } result = cal.Calculate(seperatedExpression); print.PrintF(result); } scan.Close(); print.Close(); } else { cout << "Open file failed."; return 0; } } else //无参数情况 { input = argv[1]; seperatedExpression = scan.ToStringQueue(input); if (seperatedExpression.front() == "ERROR") { print.PrintLengthError(); return 0; } result = cal.Calculate(seperatedExpression); print.DefaultPrint(result); } return 0; }