C/C++ I/O处理
C标准I/O函数
putchar(c) // 将字符变量c输出到标准I/O
c = getchar() // 将标准输入的字符赋值给变量c
格式化输入输出:
printf(格式控制, 输出表列);
格式字符汇总表:
printf格式字符汇总表
格式字符 功能
%a 使用科学计数法将实数按十六进制输出,阶码前为字母p(C99标准新增)
%A 使用科学计数法将实数按十六进制输出,阶码前为字母P(C99标准新增)
%c 输出一个字符
%d 输出有符号十进制数
%e 使用科学计数法输出实数,阶码前为字母e
%E 使用科学计数法输出实数,阶码前为字母E
%f 输出十进制实数
%g 阶码小于-4或超过指定精度时用%e,否则使用%f格式输出
%G 阶码小于-4或超过指定精度时用%E,否则使用%f格式输出
%i 与%d相同,输出十进制有符号整数
%o 输出无符号八进制整数
%p 输出指针
%s 输出字符串
%u 输出无符号十进制整数
%x 输出十六进制整数(字母为小写)
%X 输出十六进制整数(字母为大写)
%% 输出百分号(%)
引自:http://hi.baidu.com/haoyuewuwei/item/e0bc02bfa097a0432bebe342
格式化输入:
scanf(格式控制, 地址列表)
将标准输出的内容输出到地址列表
C文件操作
文件打开与关闭
fopen(文件名, 使用文件打开方式);
fopen若不能正常打开,则返回NULL
fclose关闭文件
File *file = fopen("test.c", "w");
fclose(file);
文件操作
fputc(ch, fp)和ch=fgetc(fp),与标准的输出输出接近
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
fprintf(文件指针, 格式化字符串, 输出表列);
fscanf(文件指针, 格式化字符串, 输入表列);
putw和getw 对整数进行操作
fgets(str, n, fp);
fputs(str, fp);
文件定位:
rewind(fp);将文件指针回复到文件开始
fseek(文件类型指针, 位移量, 起始量); // 定位到起始量+位移量的位置,用于实现随机读取
ftell // 获取当前位置
文件状态:
reof(fp)
ferror(fp)
clearerr(fp)
C++标准输入输出
cin
cout
cerr
clog
C++基本流对象istream和ostream
关于C++输入输出流的API可参考:http://www.cplusplus.com/reference/iostream/
fstream和stringstream都来继承于istream或者是ostream
基本结构图如下:
注意:
(1).支持国际字符的支持,即支持wchar_t,在所有的流前加一个w符号,如istream变成wistream即可,其余同理可得。
(2).对象不可复制,同时也不存储在vector中,形参和返回值不能为流类型,只能传递引用
往流iostream中读写字符
#include<iostream> #include<sstream> using namespace std; int main() { iostream os; string str; os << "aa" << endl; os >> str; cout << str << "\n"; return 0; }
iostream os 是同时具有输入和输出功能的流对象。
os << "aa" 将字符串输入到os流中;
os >> str 则是将 os 中存储的内容输出到字符串中;
然后才通过控制台的输入流 显示到终端。
文件流fstream(理解为filestream)
#include<iostream> #include<fstream> using namespace std; int main() { ifstream ifs; ofstream ofs; string str; ifs.open("in.txt"); ofs.open("out.txt"); while(ifs >> str){ cout << str << "\n"; ofs << str << "\n"; } ifs.close(); ofs.close(); return 0; }
先在当前目录下新建一个in.txt和out.txt文件,并向in.txt文件中输入一些内容。
while(ifs >> str) 循环从ifs流出输出文件内容,每次为结束符或者空字符作为一行的结束,直到文件结尾。
ofs << str则是将str输入到ofs文件流中,保存到out.txt文件中。
流条件状态
状态位strm::iostate : strm::badbit, strm::failbit, strm::eofbit
方法
eof(); | 文件是否设置了流的eofbit,是则返回true |
fail(); | |
bad(); | |
good(); | |
clear(); | 重置所有状态位为有效位 |
clear(flag); | 清除状态指定状态位 |
setstate(flag) | 设定状态位 |
rdstate() | 返回当前状态位(相当于getstate?) |
尝试往标准输入流中写非法内容,输入流将发生错误中断并退出