1、 I/O的书写格式
C++标准,为了正确使用命名空间,规定头文件如下:#include<iostream>using namespace std;
所谓namespace,是指标识符的各种可见范围,C++标准程序库中的所有标识符都被定义于一个名为std的 namespace中。其实使用C++标准程序库的任何标识符时,可以有三种选择(此处略)。只是上述这种使用using namespace std的方法最方便,这样命名空间std内定义的所有标识符都有效(曝光)。输出:cout <<
// C++换行可以使用\n或者endl,空格使用” ”cout << str << "\n" << endl; cout << "My name is John"<< endl <<"the ID is "<<2<<endl;
输入:cin >> (变量需要先定义后使用,cin自动识别变量位置和类型)
float f;int a;char c;char str[100];// cin>>f>>a>>c>>str;cin >>f>>a>>c>>str; //没有分号就表示是一个语句(为了格式美观)
2、I/O流的常用控制符
使用控制符时,要在程序的头上加头文件:#includeC++常用的格式控制符如下图所示:这看着复杂,但其实因为setiosflags(ios::fixed)和使用fixed是等价的,setiosflags(ios::left)和直接使用left是等价的…所以只需要记住后面几个常用的含义就可以了。 fixed ,表示以普通小数计数法输出,非科学计数法。setw(n) ,控制紧接的变量的域宽。 默认右对齐setw()只对其后面紧跟的输出产生作用。所以如果输出的多个变量都需要控制域宽,则需要在每个变量前面都加上setw()。若输入的内容超过setw()设置的长度,则按实际长度输出。有时候,当setw(n)中的n值比较小的时候,数据也会出现不对齐,这时候把n值调大即可。 setprecision(n),控制输出流显示浮点数的精度,即小数点后的位数。setfill(char c),在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充。 <<setw(2)<<setfill(‘0’)<<c<<“ “ ,常使用setfill控制月份,位数不足填充‘0’ left和right,更改对齐方式。 默认的是右对齐。对后面所有的变量都起作用。 showpos,在正数之前加上正号。
3、C++中字符或字符数组输入
cin>>会过滤掉不可见字符(如:空格,回车,TAB 等)。若不想略过空白字符,使用: cin>>noskipws>>n;#include<iostream>#include<iomanip> using namespace std;int main(){float f;int a;char c;char str[100];cin >> f >> a >> c >> str;// cin >> f >> a >> noskipws >> c >> str; //这样就可以读取空格,如下输入2,c输出格式将是一个空格,输出为:2 10 cout<< f << " " << a << " " << c <<" "<< endl;}// 输入1: 2 10 a szu;// 输出1: 2 10 a // 输入2: 2 10 szu (希望读入空格c)// 输出2: 2 10 s (并没有读入空格,而是滤掉不可见字符)
cin>>str 遇空格、回车、tab结束,不能读入空格(例如想读入“I like szu”这段字符串改怎么办?)。可以使用istream类的成员函数getline,读一行:cin.getline(str)
istream& getline(char* s, streamsize count, char delim);
第一个参数为读取也就是cin的变量;第二个参数为变量的最大字符数;第三个变量为读取结束的符号,可选,默认以换行符结束。
所以,这个函数表示从istream中读取至多n个字符保存在s对应的数组中,遇到换行符‘\n’或delim,则终止。
注意:最多读取count-1个,最后一个是换行符。
#include<iostream>#include<iomanip> using namespace std;int main(){char str[100];cin.getline(str,100);cout << str << endl;}// 输入1: I like szu// 输出1: I like szu
4、例题:【id:408】F. C++输入输出
题目描述
某教学系统发生故障,导致输入的学生信息混杂一起
在一行输入的数据中混杂了各种学生信息,包括学号(int)、性别(单个字母)、姓名(字符串)、绩点(浮点数)
要求使用C++的cin和cout编写一个程序,能够把混杂数据根据要求分成多行输出
输入
在一行中依次输入两个学号、一个性别、一个姓名、一个成绩
输出
按姓名、学号、性别、成绩分成四行输出,其中浮点数精确到小数点后1位
格式样例
输入:
152101 153001 M tony 3.249
输出:
tony
152101 153001
M
3.2
#include<iostream>#include<iomanip>using namespace std;int main(){int i1,i2;char str1; //这里使用str1[0]时会报错,因为其实是一个字符还有一个换行符‘\0’char str2[100];float f;cin>>i1>>i2>>str1>>str2>>f;cout<<str2<<endl;cout<<i1<<" "<<i2<<endl;cout<<str1<<endl;cout<<fixed<<setprecision(1)<<f<<endl;return 0;}