实验八 输入输出流(一)

内容1:标准输入输出流重定向
(1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。
(2) 分别为类Time重载提取运算符(>>)和插入运算符(>>)。
a. 输入格式:14 30 15 (三个整数,分别表示时、分、秒)
b. 输出格式:14.5042 (一个定点小数,要求保留4位小数)
(3) 运行程序,输入一个时间,输出该时间对应的小数,如下图所示
(4) 新建输入文件D:\in.txt,在文件中输入一个时间,如下图
打开命令提示符,进入到程序所在的路径,输入如下命令运行程序:
打开输出文件D:\out.txt,查看其内容,如下图:
注意:要求提示语句不能出现在输出文件中,只能出现在屏幕上。
附代码
!!!编译环境 DevC++ 5.11 TDM-GCC 4.9.2 64-Bit Release
头文件 iquery.h

#ifndef  _IQUERY_H
#define _IQUERY_H 1
    using namespace std;
    class Time{
        public:
            friend ostream &operator<<(ostream &,const Time&);  
            friend istream &operator>>(istream &,Time&);  
//          friend fstream &operator<<(fstream &,const Time&);  
//          friend fstream &operator>>(fstream &,Time&); 
        private:
            double hour;
            double minute;
            double second;
            double xiaoshu;     
    }; 
#endif

头文件实现文件 iquery,cpp

#include <iostream>
#include "string"
#include "iquery.h"
#include "iomanip"
#include "cmath" 
using namespace std; 

ostream &operator<<(ostream &output,const Time& time)  
{  

    if(time.hour>24||time.minute>60||time.second>60){
        clog<<"输入格式错误:"<<endl<<"请关闭程序并检查输入的时间" ;
    }
    else{
        output<<"输出该时间对应的小数:";
        output<<setw(6)<<time.hour+time.minute/60+time.second/3600;
    }
    return output;  
}  

//fstream &operator<<(fstream &output,const Time& time)  
//{  
//  
//  if(time.hour>24||time.minute>60||time.second>60){
//      clog<<"输入格式错误:"<<endl<<"请关闭程序并检查输入的时间" ;
//  }
//  else{
//      output<<"输出该时间对应的小数:";
//      output<<setw(6)<<time.hour+time.minute/60+time.second/3600;
//  }
//    return output;  
//}    
istream &operator>>(istream &input,Time& time)  
{  

//  input.ignore();//skip  
    input>>time.hour;  

   input.ignore();//skip  
    input>>time.minute;  

   input.ignore();//skip  
    input>>time.second;   
    return input;  
}  
//fstream &operator>>(fstream &input,Time& time)  
//{  
//    
////  input.ignore();//skip  
//    input>>time.hour;  
//     
//   input.ignore();//skip  
//    input>>time.minute;  
//  
//   input.ignore();//skip  
//    input>>time.second;   
//    return input;  
//}  

源码 main.cpp

#include <iostream>
#include "string"
#include "iquery.h"
#include "iomanip"
#include "cmath"
#include "fstream"
using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
    Time time;
    ifstream infile;
    ofstream outfile;
    infile.open("in.txt",ios::in);
    if (!infile.is_open())
    clog<<"error in open in.txt in infile";
    infile>>time;
    outfile.open("out.txt", std::ios::out | std::ios::app);  
    if (!outfile.is_open())
    clog<<"error in open out.txt in outfile";
    outfile<<time;
    outfile.close();
    return 0;
}
注:
已经出现过的error:
存在的问题:
可行性优化:

猜你喜欢

转载自blog.csdn.net/qq_40724028/article/details/80348166
今日推荐