目录
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
看注释就明白了,对吧~
今天到这,拜~
允许转载,请注明出处