☀️光天化日学C语言☀️(05)- 格式化输入 | 恭喜你,你应该可以做一款独立游戏了

网友投稿 825 2022-05-28

一、前言

二、人物简介

第一位登场的就是今后会一直教我们C语言的老师 —— 光天。

第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、概念简介

1、输入的含义

2、标准输入

在C语言中,有三个函数可以用来在键盘上输入数据,它们分别是:

1)gets() :用于输入一行字符串;

2)getchar() :用于输入单个字符;

3)scanf():可以输入各种类型的数据,作为最灵活、最复杂、最常用的输入函数,虽然无法完全替代前面两者,但是却是必须掌握的,今天我们就来全面了解一下这个函数。

3、格式化

我们在进行输入的时候,其实都是一个字符串,但是这个字符串被输入后有可能当成整数来用,也有可能还是字符串,这个计算机自己是不知道规则的,需要写代码的人告诉它,这个告诉它如何输入的过程就被称为格式化。

四、整数的格式化输入

scanf的函数的命名含义是:Scan(扫描) 和 Format (格式) ,即 格式化输入。

和输出一样,输入的时候,也根据数据类型的不同,分为 整数、浮点数、字符、字符串等等。

但是这里会有很多问题,拿整数的输入为例,我们一个一个来看。

1、单个数据的输入

对于单个数据的输入,如下代码所示:

#include int main() { int a; scanf("%d", &a); printf("%d\n", a); return 0; }

这段代码的执行结果如下:

1314↙ 1314

其中↙代表回车,即我们通过键盘输入1314,按下回车后,在屏幕上输出1314。

类比输出,我们发现,输入和输出的差别在于:

(

1

)

(1)

(1) 函数名不同;

(

2

)

(2)

(2) 输入少了换行符 \n;

(

3

)

(3)

(3) 输入多了取地址符&;

我们会在后面指针的章节来围绕对这个符号进行展开的。

2、多个数据的输入

类比单个数据的输入,我们来看看两个数据的输入:

#include int main() { int a, b; scanf("%d", &a); scanf("%d", &b); printf("%d %d\n", a, b); return 0; }

这段代码的执行结果如下:

520↙ 1314↙ 520 1314

其中↙代表回车,即我们通过键盘输入520,按下回车,再输入1314,按下回车后,在屏幕上输出520 1314。

这个很好理解,那么我们同样可以把输入放在一行上进行输入,类比输出的格式,如下:

#include int main() { int a, b; scanf("%d %d", &a, &b); printf("%d %d\n", a, b); return 0; }

这段代码的执行结果如下:

520 1314↙ 520 1314

其中↙代表回车,即我们通过键盘输入520、空格、1314,按下回车后,在屏幕上输出520 1314。

所以,多个数据的输入,我们可以放在一个scanf语句来完成。

3、空格免疫

然后我们来看下,对于输入的数据之间有一个空格和多个空格的情况,代码如下:

#include int main() { int a, b; scanf("%d %d", &a, &b); printf("%d %d\n", a, b); return 0; }

520 1314↙ 520 1314

其中↙代表回车,即我们通过键盘输入520、n个空格、1314,按下回车后,在屏幕上输出520 1314。

也就是说,虽然文中要求是1个空格,但是我们输入多个也不影响我们输入,再来看下一种情况:

#include int main() { int a, b; scanf("%d %d", &a, &b); printf("%d %d\n", a, b); return 0; }

520 1314↙ 520 1314

其中↙代表回车,即我们通过键盘输入520、1个空格、1314,按下回车后,在屏幕上输出520 1314。

也就是说,虽然文中要求多个空格,但是我们输入1个也不影响我们输入。

4、回车结算

通过以上的几个例子,我们发现,scanf()是以回车来结算一次输入的。

用户每次按下回车键,计算机就会认为完成一次输入操作,scanf()开始读取用户输入的内容,并根据我们定义好的格式化内容从中提取有效数据,只要用户输入的内容和格式化内容匹配,就能够正确提取。

五、输入缓冲区

在讲输入缓冲区之前,我们先来看个例子:

#include int main() { int a, b, c, d; scanf("%d %d %d %d", &a, &b, &c, &d); printf("%d %d %d %d\n", a, b, c, d); return 0; }

接下里我们将围绕这段代码进行展开。

1 2 3 4↙ 1 2 3 4

以上是我们的期望输入。

1、少输入

我们尝试少输入1个数,按下回车后,发现程序并没有任何的输出,当我们再次输入下一个数的时候,产生了正确的输出,如下:

1 2 3↙ 4↙ 1 2 3 4

2、多输入

我们尝试多输入1个数,按下回车后,发现输出了前四个我们输入的数,如下:

1 2 3 4 5↙ 1 2 3 4

3、再次尝试

我们增加一行代码,就是在输出四个数以后,再调用一次 scanf(),如下:

#include int main() { int a, b, c, d, e; scanf("%d %d %d %d", &a, &b, &c, &d); printf("%d %d %d %d\n", a, b, c, d); scanf("%d", &e); printf("%d\n", e); return 0; }

然后我们采用上述的一次性输入5个数的方式,如下:

1 2 3 4 5↙ 1 2 3 4 5

这时候,我们发现程序正常运行了。

这是因为:我们从键盘输入的数据并没有直接交给scanf(),而是放入了输入缓冲区中,当我们按下回车键,scanf()才到输入缓冲区中读取数据。如果缓冲区中的数据符合 scanf()给定的格式要求,那么就读取结束;否则,继续等待用户输入,或者读取失败。

关于输入缓冲区的内容,比较复杂,属于进阶内容,就不在这个章节继续展开啦。

【例题1】给定一段代码,如下,并且给出一个输入,请问输出是什么。

#include int main() { int a = 9, b = 8, c = 7, d = 6, e = 5; scanf("%d %d %d %d", &a, &b, &c, &d); printf("%d %d %d %d\n", a, b, c, d); scanf("%d", &e); printf("%d\n", e); return 0; }

☀️光天化日学C语言☀️(05)- 格式化输入 | 恭喜你,你应该可以做一款独立游戏了

输入如下:

1 2b 3 4 5↙

六、其他数据类型的格式化输入

其它数据类型,例如浮点数、字符、字符串的格式化参数类似 printf,如下:

1、字符串的输入

关于字符串,后面在讲完数组以后,还会着重讲,也有很多匹配算法是应用于字符串上的,也是一个很重要的内容,所以这里不作太多介绍,只需要记住,字符串输入时&可以不加,如下:

#include int main() { char str[100]; scanf("%s", str); // (1) printf("%s\n", str); scanf("%s", &str); // (2) printf("%s\n", str); return 0; }

(

1

)

(1)

(1) 和

(

2

)

(2)

(2) 的方式都是可以的,但是我们一般采用

(

1

)

(1)

(1) 的方式;

2、做个简单的游戏吧

这是一个算命游戏,要求根据输入的姓名,得到这个人的算命信息。

我们先来看看效果:

好啦,代码实现如下:

#include int main() { char str[100]; int height; printf("请大侠输入姓名:"); scanf("%s", str); printf("请大侠输入身高(cm):"); scanf("%d", &height); printf("%s大侠,身高%dcm,骨骼惊奇,是百年难得一遇的人才,只要好好学习C语言,日后必成大器!\n", str, height); return 0; }

你学废了吗?评论区留下你的算命结果哦 ~~

通过这一章,我们学会了 从键盘输入数据,以及实现简单的人机交互,希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

C 语言

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MapReduce学习(6)
下一篇:华为云:深耕数字化,一切皆服务
相关文章