Example #1
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;
}