二、C语言数据类型与变量(scanf和printf (2))

本章学习链接如下

 二、C语言数据类型与变量(scanf和printf (1))

二、C语言数据类型与变量(scanf和printf (3))

二、C语言数据类型与变量(scanf和printf (4)完)

1. scanf 的含义

给变量输入值

比如我们需要输入成绩

scanf()同样可以用到占位符,多了一个取地址符&,具体用法见如下的代码

在该代码中发出了一个警告,用scanf_s更为安全,这是VS特有的,VS认为scanf()不安全,但是使用scanf_s会使代码失去可移植性

被VS认为 不安全的函数还有strcpy, strcat

先按scanf_s运行该代码,解决方案在下面

在输入成绩100后继续按Enter即可继续运行代码

#include
int main ()
{
	int score = 0;//变量初始化,可以不初始化,不会报错,但是最好做这一步
    printf("请输入成绩:\n");
	//提醒用户输入值,也可以不写这一步,直接输入
	scanf_s("%d",&score);
	//&为取地址符,意思是我们输入的值是为score这个变量赋值
	//在这一步,变量score的值已经改变为输入的值
	printf("成绩=%d\n",score);//为了验证,我们可以打印score的值
	return 0;
}

输出结果

请输入成绩:
100
成绩=100

二、C语言数据类型与变量(scanf和printf (2))_第1张图片

2.解决VS需要使用scanf_s的问题

观察编译器的错误部分,将如下代码复制到第一行(顶端)即可解决问题

#define _CRT_SECURE_NO_WARNINGS 1

二、C语言数据类型与变量(scanf和printf (2))_第2张图片

1)如何使每次新建文件都自动加上这一行代码呢?不用手动去复制,步骤如下:

1.找到VS安装路径下的newc++file.cpp文件,修改newc++file.cpp该文件的内容,该文件本来为空,在该文件中添加这一行代码,以后新创建的每一个新的.c文件都会有这句代码

二、C语言数据类型与变量(scanf和printf (2))_第3张图片

2.如果有读取权限限制,不能修改,把这个文件移到桌面再修改

复制到桌面,修改后再粘贴到原位置,这样操作后新建的 项自带这一句代码

二、C语言数据类型与变量(scanf和printf (2))_第4张图片

二、C语言数据类型与变量(scanf和printf (2))_第5张图片

2)为什么VS认为scanf()不安全呢?

scanf不会检测输入的长度和空间,判断目的空间是否能放得下,如果输入出错,那程序即会报错,比如输入一个5个元素的数组,但是你实际输入了7个,scanf不会提醒用户出错,会把7位全部存入数组,导致程序崩溃

让我们来看看此时scanf()和scanf_s()的区别

scanf(),虽然程序出错,但是abcdefj被成功打印

#include
int main() 
{
	char arr[5] = { 0 };//初始化数组,数组只有五个元素
	scanf("%s", arr);//数组名本来就是地址,无需取地址
	printf("%s\n", arr);
	return 0;
}

二、C语言数据类型与变量(scanf和printf (2))_第6张图片

scanf_s()在使用时传递多一个参数

`scanf_s()` 函数是 `scanf()` 函数的一个更安全的变体,常用于 Microsoft 的 Visual C++ 环境中。与 `scanf()` 相比,`scanf_s()` 要求为某些接收输入的参数额外提供一个大小参数,这是为了避免缓冲区溢出,增强程序的安全性。

在使用 `scanf_s()` 时,对于所有指向字符数组(字符串)的指针,你需要传递一个额外的参数,指定该数组的大小。例如,如果你想读取一个字符串到字符数组 `char str[50]` 中,你应该这样写:

char str[50];
scanf_s("%s", str, (unsigned)_countof(str));

在这个例子中,`_countof(str)` 是 Microsoft Visual C++ 中特有的宏,用来计算数组 `str` 的元素数量。如果你使用的是其他编译器或不确定 `_countof` 的可用性,可以直接使用数组的大小,如 `50`。

对于非字符数组的其它类型(如 `int`, `float` 等),使用 `scanf_s()` 时不需要提供额外的大小参数,与 `scanf()` 的用法相同。

3.scanf( )的基本用法

scanf( ) 函数用于读取用户键盘输入,程序运行到这个语句时,会停下来,等待用户从键盘输⼊。
用户输⼊数据、按下Enter后, scanf( ) 就会处理⽤⼾的输⼊,将其存⼊变量
定义在头⽂件 stdio.h 中,sacnf 需要一个取地址符。
scanf也可以一次取多个。
1 scanf("%d", &i);
2 scanf("%d%d%d%d",&i,&a,&b,&c);

你可能感兴趣的:(C语言学习,c语言,开发语言)