[C语言小白]scanf函数的细节理解与感悟

Posted yirenOAQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言小白]scanf函数的细节理解与感悟相关的知识,希望对你有一定的参考价值。

scanf函数

scanf函数使用前提(VS编译器)

scanf函数的使用不需要引用头文件,但是在VS2017(2019也是如此)中使用使,语法结构可能会导致系统报错
一般有三种解决方案:
①在文件开头加上一行代码:

#define _CRT_SECURE_NO_WARNINGS 1

②使用scanf_s函数,但是和scanf使用方法不太一样,且仅在VS编译器中有效,无法跨平台使用(不推荐!!!)
③(最推荐的方法)找到VS安装目录下的newc++file.cpp文件(此文件建议自己搜一下位置,不同版本位置不一样),以记事本形式打开,添加方案①中的代码,然后保存(如果说没有权限,就以管理员形式打开,或者新建一个txt文档,输入方案①中的代码,再把文件修改成.cpp后缀的文件,然后替换即可)

这样操作后,每次新建空白文件时,都会自动输入这个文件中已有的内容(如图,编者为了偷懒甚至把主函数直接抄了上去)

scanf函数的基本使用方法

首先,scanf函数的基本使用方法为

scanf("%xxx",&yyy);

其中,xxx为你输入的数据类型,例如整形,则是%d
yyy为你输入的数据地址
举例如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int num = 0;
	printf("请输入数据:");
	scanf("%d", &num);
	printf("num = %d\\n", num);
	return 0;
}

执行后输入数字1再按回车:

scanf函数的使用问题

初学C语言的小白,可能会习惯性地打上\\n的换行符(没错就是我)
\\n在printf函数中正常表现,但是一旦到了scanf函数里,就出了问题(并不是bug)
如下图演示:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int num = 0;
	printf("请输入数据:");
	scanf("%d\\n", &num);
	printf("num = %d\\n", num);
	return 0;
}

执行后输入数字1再按回车时:

可以看到,我们的代码执行到scanf函数就停住了,后面的printf函数并没有进行执行。
如果此时输入任意内容,再次按下回车:

这时候新学的小白就会很疑惑。
为啥我要输入两次才会出结果呢?结果还是第一次输入的内容。

首先我们要明白scanf函数的作用:输入一个量,然后将这个量对一个量赋值(如图为对num这一常量赋值,前面的&为取地址符,即找到num的地址,对它进行赋值)
那么我们要输入的内容是什么?是scanf函数后,括号中引号内的内容
如上图所示,我们需要输入的内容是一个整形(%d)和一个回车(\\n)
所以我们敲下1,再按回车时,只是满足了它的输入内容。
但是scanf函数确认输入完成时,需要再敲一个回车。
因此我们总共需要敲两下回车才能完成scanf函数的输入。
(这个我讲的不是很好,如果对计算机的程序原理有所了解可以说的很清晰,这块我就不深入解释原因了,顺带挖个坑【他挖坑一直可以的】)

当然后续如果还有更深入的了解,本文还会另作补充(他挖坑是真tmd的厉害

以上是关于[C语言小白]scanf函数的细节理解与感悟的主要内容,如果未能解决你的问题,请参考以下文章

C语言杂谈scanf()scanf_s()与错误 C4996

C语言中scanf函数的3种常见问题与应对技巧

C语言 定义函数判断奇偶性

C语言scanf_s()函数的用法

[C语言小白]三子棋小程序

C语言scanf语句导致无法进入循环?