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

基本结构图如下:

C/C++ I/O处理_第1张图片

 

注意:

(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?)

 

C/C++ I/O处理_第2张图片

尝试往标准输入流中写非法内容,输入流将发生错误中断并退出

你可能感兴趣的:(c/c++)