• 第五次程序设计作业 C++计算器雏形 调用文件输入输出


    一.C++计算器作业系列链接

    二.本次作业相关

    要求:第五次程序设计作业

    根据这一次的作业要求,我学习了C++的文件输入输出,调用命令行进行输入的操作,具体代码如下:

    main.cpp

    #include "calculation.h"
    #include "calculator.h"
    #include "print.h"
    
    #include <string>
    #include <string.h>
    #include <queue>
    #include <stdlib.h>
    #include <iostream>
    #include <fstream> //注:这里需要包含头文件<fstream> 
    using namespace std;
    int bitjudge = 0;
    
    int main(int argc,char*argv[]) 
    {
        Scan Sc;    
        Print Put;  
        Calculation Ca;
        
        //判断是否为文件操作 
        bool need_file = false; 
    	
        if(strcmp(argv[1],"-f") == 0)  
        {
        	need_file = true;
        }
        
        //需要进行文件操作 
        if(need_file)  
        {
        	string getsfile = argv[argc-2];  //输入文件名 
        	string putsfile = argv[argc-1]; //输出文件名 
    		     	
        	ifstream infile; 
        	ofstream outfile;
        	
        	//打开文件 
        	infile.open(getsfile.c_str(),ios::in); 
        	outfile.open(putsfile.c_str(),ios::out);
        	
        	string get_str;
        	
        	while(!infile.eof()) //未处理到文件尾 
        	{
        		getline(infile,get_str,'
    '); //读入数据 
        		
        		queue<string> que;
        		
        		que = Sc.ToStringQueue(get_str);
        		
        		double result=0;
        		
        		result = Ca.carryout(que);
        		
        		outfile << result << endl;
        	}
        	
        	//关闭文件 
        	infile.close();
        	outfile.close();
        }
        
        //无须进行文件操作 
        else
        {
        	queue<string> que;
        	
        	string str = argv[argc-1];  
        
            if(strcmp(argv[1],"-a") == 0) //判断是否有输入'-a' 
            {
        	    que.push(str);
        	    Put.pout(que);    // printf que.
            }
        
            while(!que.empty())
    	    que.pop();  // 清空que 
         
    	    que = Sc.ToStringQueue(argv[argc-1]);
        
            if(!que.empty()) 
            cout << Ca.carryout(que) << endl;
            else //出错 
            cout << "error" << endl;
        }
        
        return 0;
    }
    
    

    思路做法:
    头文件:#include <fstream>
    定义一个bool型变量need_file,判断输入的参数是否是-f,是的话置true。
    接下来判断need_file是否为真,为假说明无须文件操作,这里说明一下need_file为真的情况。

    首先把要求输入的路径和输入的路径分别赋值给两个字符串getsfileputsfile,定义一个文件输入流infile和一个文件输出流outfile,用如下语句打开文件:

        //打开文件 
        infile.open(getsfile.c_str(),ios::in); 
        outfile.open(putsfile.c_str(),ios::out);
    

    注意这里的字符串需要是C风格类型的,若直接是C++风格的字符串getsfileputsfile,编译会出错。这里用.c_str转换成C风格的字符串。

    接下来就是文件里面的内容进行操作了:

        	string get_str;
        	
        	while(!infile.eof()) //未处理到文件尾 
        	{
        		getline(infile,get_str,'
    '); //读入数据 
        		
        		queue<string> que;
        		
        		que = Sc.ToStringQueue(get_str);
        		
        		double result=0;
        		
        		result = Ca.carryout(que);
        		
        		outfile << result << endl;
        	}
    

    用getline函数读入文件中每一行的内容,读入的内容用字符串get_str存储,再经过计算处理,得到的结果result输入到文件流outfile中。

    最后还要注意下文件的关闭:

        	//关闭文件 
        	infile.close();
        	outfile.close();
    

    三.实现效果:

    命令行:

    文件(txt):

    注: 输出文件多了一个0,是因为我在输入时多输入了一个回车,文件处理回车所致。

    四.思维框架图:

    (最后吐槽一下锐捷)

  • 相关阅读:
    ebs R12 支持IE11
    reloc: Permission denied
    3.23考试小记
    3.21考试小记
    3.20考试小记
    3.17考试小记
    3.15考试小记
    3.13考试小记
    3.12考试小记
    3.10考试小记
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5456917.html
Copyright © 2020-2023  润新知