输入输出流
输入1. cin.get()2. cin.getline()3. getchar()4. gets() c11以上版本已弃用,请使用gets_s()5. getline()6. scanf() 输出1. printf2. cout 文件流粘贴个常用的文件流代码吧输入
1. cin.get()
从缓存中读取一个字符,这里的cin也可以替换为其他的流,例如文件流ifstream
int get();//只读取一个字符istream& get(char& var);//读取一个字符存到var中istream& get( char* s, streamsize n );/*读取一行,最大的个数为n,但是它不对换行符进行处理,需要单独接收换行符*/istream& get( char* s, streamsize n, char delim);/*同上,第三个参数为结束字符,后面的字符不进入缓存,但是最delim却任然在缓存当中,需要单独接收*/ istream &get( streambuf &buffer );//读取字符到buffer中,直到碰到换行或EOF,streambuf一般用不到istream &get( streambuf &buffer, char delim );//或是读取字符到buffer中,直到碰到换行,EOF或delim。(相反, delim直到下一个get()不会被读取 ).streambuf一般用不到
2. cin.getline()
从缓存中读取一行 ,这里的cin也可以替换为文件流
istream &getline( char *buffer, streamsize num );//读取一行字符到缓存当中,直到num - 1个字符已经读入,下面为代码示例istream &getline( char *buffer, streamsize num, char delim );//任意地读入,直到读到字符delim为止。delim字符不会被放入buffer中,碰到一个换行标志,碰到一个EOF标志会自动结束
代码示例:判断文件内的数字字母字符的个数
ifstream infile;infile.open("test.txt",ios::in);char* s=new(char);int num=0,alpha=0,other=0,k;while(infile.getline(s,100)){//这里是读取的核心,同样判断结束可以可以加入第三个参数cout<<s<<endl;for(k=0;k<strlen(s);k++){if(isdigit(s[k])) num++;else if(isalpha(s[k])) alpha++;else other++;}}cout<<"num="<<num<<"\nalpha="<<alpha<<"\nohter="<<other<<endl; //判断文件中数字字母其他的个数
3. getchar()
// int getchar(void)char str[30];char ch;int i=0;while((ch=getchar())!='!'){cout<<ch;str[i]=ch;i++;}printf(str);
4. gets() c11以上版本已弃用,请使用gets_s()
5. getline()
这个getline特指string库函数的getline(),相对于上一个getline来说,这是使用string处理,库函数种类丰富//input获取数据来源的流,str放置数据的目标 string,delim分隔字符getline(isteam &input,string & str );//从流中读取到string当中getline(istream &input,string &str,CharT delim )//从流中读取,以delim为分隔符
代码示例:判断文件内的数字字母字符的个数
string s;while(getline(infile,s)){cout<<s<<endl;for(k=0;k<s.size();k++){if(isdigit(s[k])) num++;else if(isalpha(s[k])) alpha++;else other++;}i++;}
6. scanf()
这里放入scanf的目的是为了解决输入中带特殊符号的问题,例如输入-03-18,只需要接收数字即可,并不需要解决 ‘-’“*”符用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。如:
scanf("%d %*d %d",&a,&b);
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
宽度
用十进制整数指定输入的宽度(即字符数)。例如:
scanf("%5d",&a);
输入12345678只把12345赋予变量a,其余部分被截去。又如:
格式化复制
scanf("%4d%4d",&a,&b);
输入12345678将把1234赋予a,而把5678赋予b。
带格式的输入
scanf("%d-%d-%d",&year,&month,&day);//输入-03-17
输出
1. printf
输出格式控制printf("%d-%02d-%02d",year,month,day);
2. cout
setflogs的参数表cout << setiosflags(ios::scientific|ios::showpos) << 1234;//+1.234000e+001
文件流
粘贴个常用的文件流代码吧
#include <iostream>#include <fstream>using namespace std;int getlineFromFile(){char c[40];//以二进制模式打开 in.txt 文件ifstream inFile("in.txt", ios::in | ios::binary);//判断文件是否正常打开if (!inFile) {cout << "error" << endl;return 0;}//从 in.txt 文件中读取一行字符串,最多不超过 39 个inFile.getline(c, 40);cout << c ;inFile.close();return 0;}int getMultilineFromFile(){char c[40];ifstream inFile("in.txt", ios::in | ios::binary);if (!inFile) {cout << "error" << endl;return 0;}//连续以行为单位,读取 in.txt 文件中的数据while (inFile.getline(c, 40)) {cout << c << endl;}inFile.close();return 0;}int OpenFileIs(){// 调用 open 成员函数时,给出的文件名可以是全路径的,如第 7 行的c:\\tmp\\test.txt, // 指明文件在 c 盘的 tmp 文件夹中;也可以只给出文件名,如第 13 行的test1.txt,// 这种情况下程序会在当前文件夹(也就是可执行程序所在的文件夹)中寻找要打开的文件ifstream inFile;inFile.open("c:\\tmp\\test.txt", ios::in);if (inFile) //条件成立,则说明文件打开成功inFile.close();elsecout << "test.txt doesn't exist" << endl;ofstream oFile;oFile.open("test1.txt", ios::out);if (!oFile) //条件成立,则说明文件打开出错cout << "error 1" << endl;elseoFile.close();oFile.open("tmp\\test2.txt", ios::out | ios::in);//第 18 行的tmp\\test2.txt给出的是相对路径,// 说明 test2.txt 位于当前文件夹的 tmp 子文件夹中。// 第 24 行的..\\test3.txt也是相对路径,代表上一层文件夹,此时要到当前文件夹的上一层文件夹中查找 test3.txt。// 此外,..\\..\\test4.txt、..\\tmp\\test4.txt等都是合法的带相对路径的文件名。if (oFile) //条件成立,则说明文件打开成功oFile.close();elsecout << "error 2" << endl;fstream ioFile;ioFile.open("..\\test3.txt", ios::out | ios::in | ios::trunc);if (!ioFile)cout << "error 3" << endl;elseioFile.close();return 0;}int Read_WriteFile(){int x,sum=0;//in.txt 10 20 30 40 50ifstream srcFile("in.txt", ios::in); //以文本模式打开in.txt备读if (!srcFile) {//打开失败cout << "error opening source file." << endl;return 0;}ofstream destFile("out.txt", ios::out); //以文本模式打开out.txt备写if (!destFile) {srcFile.close(); //程序结束前不能忘记关闭以前打开过的文件cout << "error opening destination file." << endl;return 0;}//可以像用cin那样用ifstream对象while (srcFile >> x) {sum += x;//可以像 cout 那样使用 ofstream 对象destFile << x << " ";}cout << "sum:" << sum << endl;destFile.close();srcFile.close();// 通过分析程序的执行结果不难理解,对于 in.txt 文件中的 "10 20 30 40 50" 字符串,srcFile 对象会依次将 "10"、"20"、"30"、"40"、"50" 读取出来,将它们解析成 int 类型的整数 10、20、30、40、50 并赋值给 x,同时完成和 sum 的加和操作。// 同样,对于每次从 in.txt 文件读取并解析出的整形 x,destFile 对象都会原封不动地将其再解析成对应的字符串(如整数 10 解析成字符串 "10"),然后和 " " 空格符一起写入 out.txt 文件。return 0;}
如果觉得《总结C++所有的输入输出方法(包含文件流)》对你有帮助,请点赞、收藏,并留下你的观点哦!