[TOC]

​ 在控制台程序中,用户经常需要读写程序到控制台界面,其中数据<->内核缓冲区<->控制台窗口。为了表述方便,我们直接认为数据读写到控制台上。

一、控制台的输入

控制台的输入常见有如下几种方式:

#include<iostream>
using namespace std;
//方式一:getchar()
char c=getchar()//从控制台读取任何一个字符,可以是空格、tab、enter等
//方式二:getline()
string s;
getline(cin,s,delim='\n')//从输入流cin中读取一行数据到字符串s中,默认截断符是'\n'
//方式三:cin
int i;
cin>>i;//从输入流cin中默认读取一个数据到指定数据类型中,默认截断符是空格、tab、enter等空白字符
//方式四:scanf
scanf("%a %c %d",&a,&b,&c);
//方式五:istream.getline()
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
//作用是: 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,
//如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。

二、控制台的输出

控制台的输出常见有如下几种方式:

#include<iostream>
using namespace std;
//方法一:输出流 cout
cout<<数据项;// cout可以自动判断数据类型并转换为字符进行输出
//方法二:标准输出函数 printf
printf("<格式化字符串>", <参量表>);
%d 十进制有符号整数
    %3d表示输出3位整数,不够3位右对齐
    %03表述输出3位整数,不够前面补0
    %-3d表示右对齐
%x 无符号以十六进制表示的整数
%o 无符号以八进制表示的整数
%f 浮点数
    %9.2f表示输出9位浮点数,其中小数位为2
%s 字符串
    %8s表示输出8个字符串的字符串
    %6.9s表示输出长度在[6,9]之间的字符串,超过部分舍弃
%c 单个字符
%u 十进制无符号整数
%p 指针的值
%e 指数形式的浮点数
以上默认不够位数右对齐,够位数则按实际位数输出,浮点数小数部分够位数则四舍五入
\n 换行
\f 清屏并换页
\r 回车
\t Tab

三、字符串流的输入输出

1、字符串流的操作

#include<iostream>
#include<string>
using namespace std;

int main(){
    // 创建字符串流
    stringstream sstream;
    // 对该流进行输入
    int nValue = 1000;
    sstream << nValue;
    // 对该流进行输出
    string strResult;
    sstream >> strResult;
    // 字符串和流的相互转换
    stringstream ss =sstream(s)//字符串转换为流
    string newS=ss.str();
    //从字符串流中分割数组
    string tmp;
    while(getline(ss,tmp,' ')){
	}
    return 0;
}

2、用字符串流分割字符串

string s='x;b;b;b;';
string t;
stringstream ss(s);//将字符串转换为字符串流
while(getline(ss,t,';')) {
    if(t.empty()) continue;
    cout<<t<<endl;
}