第二章 输入与输出(上)——scanf()函数和printf()函数

就是scanf()函数、printf()函数、getchar()函数和putchar()函数,它们都要引入stdio.h

printf()函数

日常使用

# include <stdio.h>
void main {
    printf("hello world!");
}

结果就是hello world!

如果我要换行输出

先看看这样可不可以

# include <stdio.h>
void main {
    printf("hello ");
    printf("world!");
}

但是,它的结果还是hello world!
很显然,这样是不行的。
这时,我们得要用\n

# include <stdio.h>
void main {
    printf("hello\nworld!");
}

结果就是
hello world!

要打印 Tab(跳位)呢?用\t

# include <stdio.h>
void main {
    printf("hello\tworld!");
}

结果就是
hello world!

要打印%\呢?

将他们双写。
为什么这两个要双写呢?
看下面列表

字元说明
\转义字元,常用于双引号、\n 等要跳脱的序列上,放于转义的东西之前
%它和 d、f、c、s 等相结合,打印出变量。

那我要打印某个变量的数值该怎么办?

其实可以总结为以下的东西

符号作用
%d可以联想到dec,十进制有符号整数
%ld可以联想到long dec,十进制有符号长整数
%x, %X可以联想到hex,以十六进制表示的整数
%lx可以联想到long hex,以十六进制表示的长整数
%o可以联想到oct,以八进制数形式输出整数
%lo可以联想到long oct,以八进制数形式输出长整数
%f单精度浮点数
%lf双精度浮点数
%e以指数形式输出的浮点数
%le以指数形式输出的浮点数
%s字符串
%c字符
%u以十进制表示无符号整数
%g自动选择合适的表示法

对于像%n.mf这样的表述,我们可以这样理解。

  1. n表示输出宽度,当n大于0,向右缩进n个空格,如果字符数>n,按实际位数输出;当n小于0,向左缩进n个空格,也仅仅只是对空格起作用。
  2. m是用于调整显示小数点后m位。

然后,代码要这样写
基本格式:printf("<文本><格式化规定符>",<变量>);

#include <stdio.h>
int main(){
    char text = 'a';
    printf("%c",text);
    return 0;
}

scanf()函数

调用形式

scanf("<格式说明字符串>",<变量地址>);

一般情况下的用法

int number = 0;
scanf("%d", &number);

进阶情况下的用法

int a = 0;
int b = 0;
scanf("%d %d", &a,&b);

在命令行中,你就得要输入类似于1 1才可以满足,同时你就一下子赋值了两个变量

逆天的情况

出现以下两种情况:

int a = 0;
int b = 0;
scanf("%d %d\n", &a,&b);
int a = 0;
int b = 0;
scanf("%d %d ", &a,&b);

在命令行中,你就得要输入类似于1 1,然后还要再输入一个值才可以满足它。

总之,只要出现在scanf里面,你就得要面临着输入东西的结果,如果没输入够,它就不会停。

那如果我要输入这样的东西呢?

2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

我们都知道scanf函数有一个日常,就是会吞掉空格、回车和制表符。
但是我们写scanf("%d %d ", &a,&b);时候就不会,这是为什么?
因为这个时候,它把空格当成了要输入的部分。
所以,我们只要把空格当成要输入的部分就好了
看下面代码

#include <stdio.h>
int main() {
	char ch;
	int a[10] = {0};
	for(int i = 0; i < 10; i++) {
		scanf("%d%c", &a[i], &ch);
	}	
}

这样我们就可以让scanf认为空格是要输入的东西了,到时候它就只认回车了。

危险操作

int a; 
scanf("%d",a);

一定在注入的变量之前加&

输入一串文本

无论输入,还是输出,都要用%s

#include <stdio.h>
int main () {
    char c[100];
    scanf("%s",&c);
    printf("%s\n",c);
}  

可输入不包含空格和回车的字符串,一旦输入空格,则空格之后的不存在。

输入浮点数

一般情况下,是这样的

scanf("%lf",&value);

此时,这个value的类型是double
也可以这样

scanf("%f",&value);

此时,这个value的类型是float
其实,对于printf来说,%lf%f的区别并不是很大,但还是要做到一一对应——double时,用%lffloat时,用%f。但如果是scanf那就不一样了,对于double类型的变量用%f会发生warning,对于float类型的变量用%lf也会发生warning。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mryan2005

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

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

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

打赏作者

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

抵扣说明:

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

余额充值