您好,请问使用C++怎么输出流一个put函数问题?

#include"iostream"
#include"fstream"
using namespace std;
void main(){
int s[10], n;
ofstream file("data.dat",ios::out | ios::binary);
for (n = 0; n < 10; n++)
{
s[n] = 1;
for (int i = 1; i <= (n + 1); i++)
s[n] *= i;
file<<s[n] << endl; //此处换成file.put(s[n])<<endl就写入了乱码!
}
file.close();
}

莫回无
浏览 379回答 2
2回答

哈士奇WWW

put是用来输出单个字符的write是用来输出确定长度字符串的

温温酱

可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。C++的输入输出流及文件操作1. C++保留C的输入输出单个字符的函数(1) putchar(c) —— 字符输出例程:#includeusing namespace std;int main(){char a,b,c;a='B'; b='O';c='Y';putchar(a); putchar(b); putchar(c);putchar('/n');putchar(66);putchar(79);putchar(89);putchar(10); //10是换行的ASCII码return 0;}(2) getchar() ——字符输入函数例程:#includeusing namespace std;int main(){char c;c=getchar();putchar(c+32); //转化为小写字母,大小写之间包括[ / ] ^ - 、6个字符,因此不加26加32。'A'=65putchar('/n');return 0;}也可用cout来输出: cout<<(c=getchar()+32);2. scanf()、printf()函数的输入和输出scanf(格式控制,输出表列);printf(格式控制,输出表列);例程:#includeusing namespace std;int main(){int a;float b;char c;scanf("%d % c % f", &a,&c,&b);printf("a=%d, b=%f, c=%c /n",a,b,c);return 0;}3. 标准输入输出流cin、cout包括头文件#include输入输出流的控制符要加入头文件 #includecout<<"dec:"<cout.put(97); //显示a字符--使用cout的成员函数put(c)cin成员函数get()(1) 不带参数的char c=cin.get(); //用cin的成员函数get()从键盘读入一个字符到c中去(2) 带一个参数的cin.get(ch); //从输入的流中接受一个字符,并赋给字符变量ch(3) 带三个参数的cin.get(字符数组,字符的个数n,终止字符)例程:#includeusing namespace std;int main(){char ch[20];cout<<"in put a string:"<cin.get(ch,10,'/n'); /*取得输入流的前10-1=9个字符赋值给ch数组的前9个元素,并规定换行符为为输入流的终止结束符*/cout<return 0;}如输入:1 2 34567890 //按换行键终止流输入则输出:1 2 34567 //只读得前9个送入ch数组中cin的成员函数getline() ——从输入流中读入一行字符cin.getline(字符数组(或字符指针),字符的个数n,终止字符)例程:#includeusing namespace std;int main(){char ch[20];cout<<"input a string:"<cin>>ch;cout<<"The string read with cin is:"<cin.getline(ch,20,'/'); //读取19个字符到ch数组或遇到'/'结束cout<<"The second part is:"<cin.getline(ch,20); //读取19个字符到ch数组或遇到'/n'结束,遇到'/'仍作为字符读入cout<<"The third part is:"<return 0;}istream类的其他的成员函数如:eof(),在输入流中读取数据,如果到达末尾(遇到文件结束符),则eof()返回真,否则为假.例程:#includeusing namespace std;int main(){char c;while(!cin.eof()) //若未遇到文件结束符if((c=cin,get())!=' ') //检查读入的字符是否为空格字符cout.put(c);return 0;}4. 磁盘文件的打开和关闭打开ofstream outfile;if(outfile.open("f1.data",ios::app)==0) // 打开cout<<"打开失败!";……………………outfile.close(); //关闭5. 文件写入#include#include#include //一定不能少了,否则报错 error C2679using namespace std;int main(){string str;ofstream out("d.txt",ios::out); //等价于ofstream out("d.txt")if(!out) //若打开失败,out返回0值{cerr<<"打开失败!"<exit(0);}str="床前明月光/n疑是地上霜/n举头望明月/n低头思故乡/n";out< return 0;}6. 读文件到控制台#include#include#includeusing namespace std;int main(){ifstream infile("d://new//d.txt",ios::in); //定义输入文件的流对象,以输入方式打开磁盘文件d.txt,第二个参数可去if(!infile){cerr<<"打开失败!"< exit(1);}for(string str;getline(infile,str);) //逐行打开并逐行显示,因此在循环中实现cout< infile.close();return 0;}或把 for(string str;getline(in,str);)cout<两句改为 string str;while(getline(in,str))cout<7. 文件复制#include#include#includeusing namespace std;int main(){ifstream in("d.txt");if(!in){cerr<<"打开源文件失败!"< exit(1);}ofstream out("b.txt");if(!out){cerr<<"打开目的文件失败!"< exit(1);}for(string str;getline(in,str);)out< cout<<"文件复制成功!"<in.close();out.close();return 0;}8. 自定义一个文件读入的函数 void display( char *filename)#include#include#includeusing namespace std;void display(char *filename){ifstream infile(filename,ios::in);if(!infile){cerr<<"打开失败!"< exit(1);}char ch;while(infile.get(ch))cout.put(ch);cout< infile.close();}int main(){display("d.txt");return 0;}9.关于文件读写的综合应用#include#includeusing namespace std;//从键盘读入字母并存入文件“d.txt”中void save_to_file(){ofstream ofile("d.txt");if(!ofile){cerr<<"打开失败d.txt!"< exit(1);}char c[80];cin.getline(c,80); //从键盘逐个读入一行字符for(int i=0;c[i]!=0;i++) //对字符逐个处理,知道遇到'/n'结束if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122){ofile.put(c[i]); //将字母存入磁盘文件d.txtcout< }cout< ofile.close();}//将"d.txt"中的字母转化为大写字母并存入"out.txt"中void get_from_file(){char ch;ifstream infile("d.txt");if(!infile){cerr<<"打开失败d.txt!"< exit(1);}ofstream outfile("out.txt");if(!infile){cerr<<"打开失败out.txt!"< exit(1);}while(infile.get(ch)) //逐个读入字符成功后执行下面的语句{if(ch>=97 &&ch<=122)ch=ch-32;outfile.put(ch);cout< }cout< infile.close();outfile.close();}int main(){save_to_file();get_from_file();return 0;}=========================== C/C++的字符或字符数组的读入函数总结=====================1、cin1、cin.get()2、cin.getline()3、getline()4、gets()5、getchar()1、cin>>用法1:最基本,也是最常用的用法,输入一个数字:#includeusing namespace std;main (){int a,b;cin>>a>>b;cout<}输入:2[回车]3[回车]输出:5用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束#includeusing namespace std;main (){char a[20];cin>>a;cout<}输入:jkljkljkl输出:jkljkljkl输入:jkljkl jkljkl //遇空格结束输出:jkljkl2、cin.get()用法1: cin.get(字符变量名)可以用来接收字符#includeusing namespace std;main (){char ch;ch=cin.get(); //或者cin.get(ch);cout<}输入:jljkljkl输出:j用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格#includeusing namespace std;main (){char a[20];cin.get(a,20);cout<}输入:jkl jkl jkl输出:jkl jkl jkl输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)输出:abcdeabcdeabcdeabcd (接收19个字符+1个'/0')3、cin.getline() // 接受一个字符串,可以接收空格并输出getline 会将换行符替换为空字符#includeusing namespace std;main (){char m[20];cin.getline(m,5);cout<}输入:jkljkljkl输出:jklj接受5个字符到m中,其中最后一个为'/0',所以只看到4个字符输出;如果把5改成20:输入:jkljkljkl输出:jkljkljkl输入:jklf fjlsjf fjsdklf输出:jklf fjlsjf fjsdklf//延伸://cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)//当第三个参数省略时,系统默认为'/0'//如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:#include#includeusing namespace std;main (){char m[3][20];for(int i=0;i<3;i++){cout<<"/n请输入第"<cin.getline(m[i],20);}cout<for(int j=0;j<3;j++)cout<<"输出m["<}请输入第1个字符串:kskr1请输入第2个字符串:kskr2请输入第3个字符串:kskr3输出m[0]的值:kskr1输出m[1]的值:kskr2输出m[2]的值:kskr34、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”#include#includeusing namespace std;main (){string str;getline(cin,str);cout<}输入:jkljkljkl输出:jkljkljkl输入:jkl jfksldfj jklsjfl输出:jkl jfksldfj jklsjfl和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数5、gets() // 接受一个字符串,可以接收空格并输出,需包含“#include”#include#includeusing namespace std;main (){char m[20];gets(m); //不能写成m=gets();cout<}输入:jkljkljkl输出:jkljkljkl输入:jkl jkl jkl输出:jkl jkl jkl类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:#include#includeusing namespace std;main (){char m[3][20];for(int i=0;i<3;i++){cout<<"/n请输入第"<gets(m[i]);}cout<for(int j=0;j<3;j++)cout<<"输出m["<}请输入第1个字符串:kskr1请输入第2个字符串:kskr2请输入第3个字符串:kskr3输出m[0]的值:kskr1输出m[1]的值:kskr2输出m[2]的值:kskr3自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3 的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;6、getchar() //接受一个字符,需包含“#include”#include#includeusing namespace std;main (){char ch;ch=getchar(); //不能写成getchar(ch);cout<}输入:jkljkljkl输出:j//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;总结:1.读入一行gets(char a[]); //接受一行,遇回车结束gets(m[i]) //可用于多维数组中cin.get(char a[],int 5,'/n') //将字符数组a的前5个字符读入,遇到换行符结束;比如:a bc12ds,将会读入4个字符 a bc,外加一个'/0';// 一般第三个参数不写,默认为'/0'eg:#include#includeusing namespace std;main (){string str;getline(cin,str);cout<}2.读入一个字符getchar() //接受一个字符,需包含“#include”char ch =getchar();cin.get(char c) 或者 cin.get()char ch=cin.get(); 或者cin.get(ch)getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数cin.getline(char a[],int 5,'/n') //将字符数组a的前5个字符读入,遇换行符结束;如:a bc12ds,将会读入4个字符 a bc,外加一个'/0';// 一般第三个参数不写,默认为'/0'cin.getline(m[i],20) //可用于多维数组中getline() // 接受一个字符串,可以接收空格并输出,需包含“#include"
打开App,查看更多内容
随时随地看视频慕课网APP