案例:输入任意空格和数字,输出其中的数字之和。
#include <iostream> using namespace std; int main() { int sum = 0; cout << "Please Input space or number:"; int i = 0; while( cin >> i) { sum += i; while(cin.peek() == ' ') { cin.get(); } if( cin.peek() == ' ') { break; } } cout << "The result is " << sum << endl; return 0; }
目录
C++ 的 I/O 发生在流中,流是字节序列。
- 标准输出流(cout)
- 如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。
- cout 是与流插入运算符 << 结合使用的
标准输入流(cin)
- 如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。
- cin 是与流提取运算符 >> 结合使用的
图1 流的输入和输出
1. 标准输出流(cout)
cout << 表达式1 << 表达式2 <<……<< 表达式n;
cout << "This is " //注意行末尾无分号
<< "a C++ "
<< "program."
<< endl; //语句最后有分号
cout << "This is "; //语句末尾有分号
cout << "a C++ ";
cout << "program.";
cout << endl;
注意 : 不能用一个插入运算符“<<”插入多个输出项,如:
cout<<a,b,c; //错误,不能一次插入多项
2. 标准输入流(cin)
从键盘输入三个数,赋值给a, b, c, 有以下三种方法:
cin >> 表达式1 >> 表达式2 >> 表达式3 >> 表达式4;
cin >> a //注意行末尾无分号
>> b //这样写可能看起来清晰些
>> c
>> d;
cin >> a;
cin >> b;
cin >> c;
cin >> d;
3. 输入流(cin)方法
1、cin
- 用法1:最基本,也是最常用的用法,输入一个数字:
- 用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束
#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}
// 输入:jkljkl jkljkl //遇空格结束
// 输出:jkljkl
2、cin.get() —— 接收字符
用法1: cin.get(字符变量名)
1 #include <iostream> 2 using namespace std; 3 main () 4 { 5 char ch; 6 ch=cin.get(); //或者cin.get(ch); 7 cout<<ch<<endl; 8 } 9 10 // 输入:jljkljkl 11 // 输出:j
用法2: cin.get(字符数组名, 接收字符数目)
1 #include <iostream> 2 using namespace std; 3 int main () 4 { 5 char a[20]; // 字符串可以保存19位,最后一位是0 6 cin.get(a,18); // 取其中的前17位 7 cout<<a<<endl; 8 } 9 10 // 输入:jkl jkl jkl 11 // 输出:jkl jkl jkl 12 13 // 输入:ythrdhtgiludfgvkhlfgxdzfxcgvhkjfxdxcvjhkhgbx 14 // 输出:ythrdhtgiludfgvkh (接收17个字符+1个' ')
3、cin.getline()
cin.getline(字符串,接受数目,结束字符串) —— 接受一个字符串,可以接收空格
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main () 6 { 7 char m[3][20]; 8 for(int i=0;i<3;i++) 9 { 10 cout<<" 请输入第"<<i+1<<"个字符串:"<<endl; 11 cin.getline(m[i],20, 'a'); 12 } 13 14 cout<<endl; 15 for(int j=0;j<3;j++) 16 cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl; 17 18 }
/* 运行结果
请输入第1个字符串:
111a
请输入第2个字符串:
222a
请输入第3个字符串:
333a
输出m[0]的值:111
输出m[1]的值:222
输出m[2]的值:333
#####
*/
4、getline()
和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,需声明 #include<string>
5、gets()
类似cin.getline(),属于string流,
6、getchar()
getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;
4. 输出流(cout)格式控制
ios::dec 以10进制表示整数
ios::hex 以16进制表示整数
ios::oct 以8进制表示整数
ios::showbase 为整数添加一个表示其进制的前缀
ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐
ios::left 在串的末尾插入填充字符以使串居左对齐
ios::right 在串的前面插入填充字符以使串居右对齐
ios::boolalpha 将bool类型的值以true或flase表示,而不是1或0
ios::fixed 将符点数按照普通定点格式处理(非科学计数法)
ios::scientific 将符点数按照科学计数法处理(带指数域)
ios::showpoint 在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点)
ios::showpos 强制在正数前添加+号
ios::skipws 忽略前导的空格(主要用于输入流,如cin)
ios::unitbuf 在插入(每次输出)操作后清空缓存
ios::uppercase 强制大写字母