Exemple #1
0
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;
		}
	}
Exemple #2
0
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;
}