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流的常用控制符
- 使用控制符时,要在程序的头上加头文件:#include
- C++常用的格式控制符如下图所示:
这看着复杂,但其实因为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)
第一个参数为读取也就是cin的变量;第二个参数为变量的最大字符数;第三个变量为读取结束的符号,可选,默认以换行符结束。istream& getline(char* s, streamsize count, char delim);
所以,这个函数表示从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;
}