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

观书散遗帙,探古穷至妙。这篇文章主要讲述[C语言小白]scanf函数的细节理解与感悟相关的知识,希望能为你提供帮助。
scanf函数 scanf函数使用前提(VS编译器)【[C语言小白]scanf函数的细节理解与感悟】scanf函数的使用不需要引用头文件,但是在VS2017(2019也是如此)中使用使,语法结构可能会导致系统报错
一般有三种解决方案:
①在文件开头加上一行代码:

#define _CRT_SECURE_NO_WARNINGS 1

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

文章图片

这样操作后,每次新建空白文件时,都会自动输入这个文件中已有的内容(如图,编者为了偷懒甚至把主函数直接抄了上去)
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再按回车:
[C语言小白]scanf函数的细节理解与感悟

文章图片

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再按回车时:
[C语言小白]scanf函数的细节理解与感悟

文章图片

可以看到,我们的代码执行到scanf函数就停住了,后面的printf函数并没有进行执行。
如果此时输入任意内容,再次按下回车:
[C语言小白]scanf函数的细节理解与感悟

文章图片

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

    推荐阅读