C++从入门到放弃--5.scanf()和printf()

目录

5.1 回顾cin和cout

5.2 printf()

5.2.1 printf()和scanf()

5.2.1.1 I/O的优缺点

5.2.1.2 操作

5.2.1.3 其他

5.3 scanf() 


Hello~下午好啊,告诉你们个事情:

今天?更 

开始吧~

(长文预警!!!)

5.1 回顾cin和cout

前四章节,我们都对cin和cout有或多或少的了解,我们来回顾一下。

cout是一个ostream类对象,cin是一个istream类对象,分别进行输出和输入。

cout的格式:

cout << <输出变量/常量表达式>;

cin的格式:

cin >> <输入变量>;

好,回顾的内容不在多说,开始正文:

5.2 printf()

5.2.1 printf()和scanf()

学习过C语言的同学知道,printf()(print-format,格式输出)和scanf()(scan-format,格式输入)是C语言里的输入和输出工具,它们不同于输入/输出流,它们有一个新的名字,I/O(in/out)。

5.2.1.1 I/O的优缺点

优点:

输入输出效率高,直接把内容bia到控制台输出上,不同于输入/输出流的做法,把内容放在缓冲区,等快烂了再倒在控制台上。

缺点:

格式控制符一堆,难记,不兼容新版C++标准的东西,需要转换(例如把string类变成string.c_str()),容易写错类型然后输出一堆乱码。

  • 小贴士:printf()和scanf()使用指针(pointer,以后将会讲到)输入/输出,所以你用整数控制符把double输出成int类型也没问题。

5.2.1.2 操作

先看printf()的格式:

printf(<格式控制字符串>,<输出元素队列>);

再分析程序:

//printf()的使用
#include <iostream>
#include <cstdio>    //或者stdio.h
using namespace std;

int main() {
    int t;
    cin >> t;
    printf("Today's water temperature is %d degree.", t);
    return 0;
}

来看参数:

"Today's water temperature is %d degree." /*格式控制字符串*/, t /*输出元素队列*/

 "Today's water temperature is %d degree."指的是我输出这一行,然后把%d替换为元素列表里的参数,它的作用是:

t,我先帮你占一下位,一会儿你来这个位置上。

对,就是这样。

可不是说什么类型都能用%d的,看一张表:

格式控制符说明
1%d用十进制,有符号的形式输出int类型。
2%hd用十进制,有符号的形式输出short类型。
3%ld用十进制,有符号的形式输出long类型。
4%u用十进制,无符号的形式输出int类型。
5%hu用十进制,无符号的形式输出short类型。
6%lu用十进制,无符号的形式输出long类型。
7%o用八进制,无符号的形式输出int类型。
8%ho用八进制,无符号的形式输出short类型。
9%lo用八进制,无符号的形式输出long类型。
10%#o用八进制,无符号的形式输出int类型。
11%#ho用八进制,无符号的形式输出short类型。
12%#lo用十六进制,无符号的形式输出long类型。
13%x用十六进制,无符号的形式输出int类型。
14%hx用十六进制,无符号的形式输出short类型。
15%lx

用十六进制,无符号形式输出long类型。

16%#x用十六进制,无符号,带前缀的形式输出int类型。如果X是大写,则输出前缀0X,否则输出0x
17%#hx用十六进制,无符号,带前缀的形式输出short类型。如果X是大写,则输出前缀0X,否则输出0x
18%#lx用十六进制,无符号,带前缀的形式输出long类型。如果X是大写,则输出前缀0X,否则输出0x
19%f用十进制的形式输出float类型。
20%lf用十进制的形式输出double类型。
21%e用科学计数法的形式输出float类型。如果e是大写,则输出中e是大写,否则为小写
22%le用科学计数法的形式输出double类型。如果e是大写,则输出中e是大写,否则为小写
23%g用短科学计数法的形式输出float类型。如果g是大写,则输出中e是大写,否则为小写
24%lg用科学计数法的形式输出double类型。如果g是大写,则输出中e是大写,否则为小写
25%c输出char类型。
26%s输出C风格字符串类型。

有时候,可能有好多个要输出的内容,比如下面:

int a = 47;
double b = 4.58;
char c = 'A';
printf("1:%d,2:%lf,3:%c", a, b, c);

那么这时候控制符就要对号入座了。

       a         b         c

      ↑        ↑          ↑

 1:%d , 2:%lf ,3:%c

不难吧~ 

5.2.1.3 其他

还有一些要讲的,第一个:位宽,来看程序:

int i = 3;
printf("use 5 space to print i:%5d",i);

程序输出:

use 5 space to print i:    3

可以看到,它往右靠了,并且有四个空格,最后一个空间输出i,如果i=23呢?

use 5 space to print i:   23

三个空格+2+3,明白了吧。如果我设置的位宽小于我实际数字的位数,会打印所有位。

如果我想左对齐呢?改写程序 :

int i = 3;
printf("use 5 space to print i:%-5d",i);

 输出结果:

use 5 space to print i:3    

哈哈,对吧~

第二个,小数点后位:

看程序:

double i = 3.31311;
printf("use two decimal places:%.2f",i);

运行结果:

use two decimal places:3.31

虽然我初始化了五位,但是我设置了小数点后两位,所以只有3.31

再看程序: 

double i = 3.3;
printf("use two decimal places:%.2f",i);

运行结果:

use two decimal places:3.30

如果小数点不足以占你设置的小数点位数,那补0

5.3 scanf() 

刚才我们学习了printf(),现在开始scanf()~

看格式:

scanf(<格式控制字符串>,&<输入元素队列>);

细心地同学发现多了个&,那是什么?对了,取地址符,以后会讲到,为什么要它呢?

打个比方,我要从控制台搬数字给变量a,我必须知道它家地址,难道我要把程序里所有变量挨个敲门问你是不是a?

这也是今天的重点:

一定要加&,一定要加&,一定要加&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一定要加&,一定要加&,一定要加&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一定要加&,一定要加&,一定要加&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一定要加&,一定要加&,一定要加&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

它们俩个格式控制符可以共用(除了位宽),还有需要补充的,

比如下面的:

scanf("%d+%d=%d",a,b,c)  //这里面字符就排除掉了,你输入1+2=3,它读取1,2和3
scanf("%d+%d=%*d",a,b) //带*的不要,你输入1+2=3,它读取1和2

看注释就明白了,对吧~

今天到这,拜~

允许转载,请注明出处

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值