C++可使用的IO
2012-08-28 16:01
169 查看
题目:键盘输入一系列数字(-1结束),输出到a文件中
分别用C++的库,ISO C的库实现,又用getline实现整行的读取(包括空格)。cin、scanf、都是以空格和换行来标志一个输入的,如果输入1 2 3(注意中间有空格)会产生三个输入值。但是如果想输入一个字符串,比如“hello world”那么用cin和scanf就不好用了,用getline可以读入包括空格的一整行字符串。也可以用fgets从标准输入读取一行(包含空格)。这里注意,fgets和getline都把换行符号读入了,而cin和scanf都没有读入换行符,这样在输出的时候要特别注意。下面是这三种的用法
分别用C++的库,ISO C的库实现,又用getline实现整行的读取(包括空格)。cin、scanf、都是以空格和换行来标志一个输入的,如果输入1 2 3(注意中间有空格)会产生三个输入值。但是如果想输入一个字符串,比如“hello world”那么用cin和scanf就不好用了,用getline可以读入包括空格的一整行字符串。也可以用fgets从标准输入读取一行(包含空格)。这里注意,fgets和getline都把换行符号读入了,而cin和scanf都没有读入换行符,这样在输出的时候要特别注意。下面是这三种的用法
#include <iostream> #include <fstream> using namespace std; //键盘输入一系列数字(-1结束),输出到a文件中 void storeNumbersCPlus(); void storeNumbersC(); void getLineDemo(); int main() { //storeNumbersCPlus(); storeNumbersC(); //getLineDemo(); return 0; } void storeNumbersCPlus() { //C++的标准库的实现 //ofstream out("a", ofstream::out | ofstream::app); //app为append在末尾添加的意思,否则每次都会清除a中的内容的 ofstream out("a", ofstream::out); if(!out) { cerr<<"open failed"<<endl; return; } int n; while(cin>>n) { if(n == -1) break; else out<<n<<endl;//这里必须加个endl或者空格,否则数据之间没有分割,在读的时候会当作一个数据读出来的 } out.close(); cout<<"The numbers are:"<<endl; ifstream input("a");//等价于ifstream input("a", in);默认的状态为in if(!input) { cerr<<"error: unable to open file"<<endl; return; } char s[100] = {0}; while(input >> s) cout<<s<<endl; input.close(); } void storeNumbersC() { //ISO C的标准库的实现 FILE *file = fopen("b", "w"); if(file == NULL) { cout<<"open failed!"<<endl; return; } char buffer[10] = {0}; while(1){ //scanf("%s", buffer); //也可以用scanf if(NULL == fgets(buffer, 10, stdin)) break; if(0 == strcmp(buffer, "-1\n")) break; else { fputs(buffer, file); //fputs("\n", file); //这里要特别注意,如果是用scanf读取的数据,要加的为换行,否则用fgets读取一行的时候,会读出“1 2 3 4”这样的数据 } } fclose(file); cout<<"The numbers are:"<<endl; FILE *fOut = fopen("b", "r"); if(fOut== NULL) { cout<<"open failed!"<<endl; return; } char outBuf[10] = {0}; while(NULL != fgets(outBuf, 10, fOut)) printf("%s", outBuf); } void getLineDemo() { char *line = NULL; size_t len = 0; ssize_t read = 0; FILE *fp = NULL; fp = fopen("c", "w"); if(fp == NULL) return; while(1) { if((read = getline(&line, &len, stdin)) != -1) { if(strcmp(line, "-1\n") == 0) break; else fputs(line, fp); //getline会自动加上一个换行的,所以这里不需要在加换行 } } if(line) free(line); cout<<"The numbers are:"<<endl; char buffer[100] = {0}; fclose(fp); fp = fopen("c", "r"); while(NULL != fgets(buffer, 100, fp)) printf("%s", buffer); }
相关文章推荐
- 【C++ 快速入门】一个使用IO库的程序
- linux c/c++ 聊天小程序代码示例 (使用socket 和 IO 多路复用技术)
- C++之第一个程序Hello World,使用IO库输出Hello World
- 使用c++标准io解析csv
- C++之使用IO库输入输出
- C++多线程中调用python api函数 GIL的使用
- C++ 函数使用总结/编程注意事项
- Ubuntu下leveldb的安装使用(C++中)
- (原創) Template Metaprogramming系列[1] : 使用遞迴/递归(Recursive) (C/C++) (.NET) (C++/CLI) (template) (TMP)
- C++ 使用void main()还是int main()?
- 浅谈C++日志系统log4cxx的使用小结详解
- .dll和.lib文件的生成和使用 c++
- C++ RAII手法实例,不使用智能指针
- C++使用迭代器遍历数组
- C++ STL中queue的使用
- C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
- 从汇编看c++中默认构造函数的使用分析
- C++中map的使用详解说明
- node.js实现即时聊天室,使用模块(express+socket.io),附源码
- 使用iostat来对linux硬盘IO性能进行检测