C语言中的scanf与scanf

您所在的位置:网站首页 scanf_s输入数组 C语言中的scanf与scanf

C语言中的scanf与scanf

2023-12-17 11:30| 来源: 网络整理| 查看: 265

Scanf

在标准C中,scanf提供了键盘输入功能。

scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。scanf函数的一般形式为:     scanf(“格式控制字符串”, 地址表列); 其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。

 

Scanf_s

在VS2019,包括以前的一些版本中,scanf会报错:

 这时我建议使用Scanf。

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内在泄露。所以VS中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。

当然这里报错你也可以依据网上提供的修改宏或者修改一些VS配置来直接运行。

但是scanf不会检查边界,读取一旦越界,数据就会存储到其他地址空间,运行就会报错,这里很麻烦。

所以建议使用scanf_s().

在循环中使用scanf_s(); int n, i; char temp; printf("please input the number of datas:\n"); scanf("%d",&n); for (i = 0; i < n; i++) { printf("data[%d]=", i); ///fflush(stdin); //清除键盘缓冲区 //scanf_s 限制字符串长度,这里输入字符不用考虑,scanf不会限制。 //如果string,可以scanf_s("%s",str,len) scanf_s("%c", &temp, 1); temp = getchar(); l->data[i] = temp; } l->last = n - 1;

这是顺序表中的一段代码。如图所示,如果你想使用循环输入,需要在scanf_s前面加上fflush(stdin)方法清除缓存区或者在scanf_s方法下面加getchar()方法。

这是因为scanf_s返回值中的回车所造成的。

这里放一张错误样例的截图:

可以看到,这里点击回车后直接跳过一次输入。

注:由于未知原因,我这里使用fflush(stdin)失效。如果遇到同样问题可以尝试getcar().



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3