关于C++输入输出流方面的问题,具体如下:

编写程序,用二进制方式读写指定的文件a.bin,在每一行前加行号,写入另一个二进制文件b.bin中,从b.bin中读取数据输出到屏幕。
编写程序lab6_1.cpp,使用void main(int argc, char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用read()和write()成员函数读入数据,使用输出流对象输出数据到文件和屏幕。

月关宝盒
浏览 149回答 2
2回答

青春有我

给你看一个简单的测试程序read 和 write 的 缓冲区参数 使用 (char *) 类型,所以想办法构造以缓冲区,与变量交换数据,读写采用整体操作下面的测试是采用联合的方式,也可以采用对象数组的方式操作注意!! 不要给已存在的重要文件名 运行下面的程序,文件内容将被清除造成不可挽回的损失。#include <fstream>#include <iostream>using namespace std;union IODWord{int sint;unsigned uint;float ffloat;char ch[4];};int main(int argc,char * argv[]){if(argc!=2){cout<<"USAGE: "<<argv[0]<<" filename"<<endl;exit(1);}cout<<"program name:"<<argc[0]<<endl;cout<<"io file name:"<<argc[1]<<endl;ofstream out;out.open(argv[1],ios::binary|ios::out); //二进制方式打开文件并清除内容,不存在则创建cout<<sizeof(int)<<"\";cout<<sizeof(unsigned int)<<"\";cout<<sizeof(float )<<"\";cout<<sizeof(char )<<"\";cout<<sizeof(long int)<<"\";cout<<sizeof(double)<<"\";IODWord outbuf[20];for (int i=0;i<5;i++){outbuf[i*4].sint = - i;outbuf[i*4+1].uint= i;outbuf[i*4+2].ffloat= (float) i*3.14;outbuf[i*4+3].ch[0]='a'+i;outbuf[i*4+3].ch[1]='A'+i;outbuf[i*4+3].ch[2]='0'+i;outbuf[i*4+3].ch[3]='9'-i;}for(int j=0;j<10;j++){out.write((char *) outbuf,sizeof(outbuf));}out.close();ifstream in;in.open("abc.bin",ios::in|ios::binary);IODWord ibuf[4];while(in.good()){in.read((char *)ibuf,sizeof(ibuf));cout<<"sint="<<ibuf[0].sint<<"\\t";cout<<"uint="<<ibuf[1].uint<<"\\t";cout<<"float="<<ibuf[2].ffloat<<"\\t";cout<<"char="<<ibuf[3].ch[0]<<ibuf[3].ch[1]<<ibuf[3].ch[2]<<ibuf[3].ch[3]<<endl;}}

一只名叫tom的猫

这个问题在不同的编译环境中有不同的效果.例如使用VC6 是按代码段编译运行代码的而如果换用TC2是按整个表达式编译运行代码的 .所以一些结果与理论学习上得到的结果不一致.最好避免这种写法。改分行写#include<iostream>using namespace std;int main(){int i = 12;cout<<i ;cout<<'\t';cout<<i ;cout<<'\t';cout<<i <<endl;}
打开App,查看更多内容
随时随地看视频慕课网APP