内容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:
存在的问题:
可行性优化: