【C++_01】入门第一课,一文讲清C++的输入与输出(I/O流、书写格式、常用控制符)

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)
    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;
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ferry_xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值