专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

scanf在C语言中的作用,scanf函数用法

来源:小易整编  作者:小易  发布时间:2023-03-24 02:40
摘要:scanf在C语言中的作用,scanf函数用法如果你想让自己的输入更加炫酷、更加个性化、更加安全,那么还需要学习scanf()的高级用法,这才是大神和菜鸟的分水岭。好了,言归正传,我们分三个方面讲解scanf()的高级用法。1)指定读取长度...

scanf在C语言中的作用,scanf函数用法

scanf在C语言中的作用,scanf函数用法

如果你想让自己的输入更加炫酷、更加个性化、更加安全,那么还需要学习 scanf() 的高级用法,这才是大神和菜鸟的分水岭。

好了,言归正传,我们分三个方面讲解 scanf() 的高级用法。

1) 指定读取长度

还记得在 printf() 中可以指定最小输出宽度吗?就是在格式控制符的中间加上一个数字,例如,d表示输出的整数至少占用 10 个字符的位置:

  • 如果整数的宽度不足 10,那么在左边以空格补齐;

  • 如果整数的宽度超过了 10,那么以整数本身的宽度来输出,10 不再起作用。

其实,scanf() 也有类似的用法,也可以在格式控制符的中间加一个数字,用来表示读取数据的最大长度,例如:

  • %2d表示最多读取两位整数;

  • s表示读取的字符串的最大长度为 10,或者说,最多读取 10 个字符。

请看下面的例子:

#include <stdio.h>
 int main(){
 int n;
 float f;
 char str[23];
 scanf("%2d", &n);
 scanf("%*[^\n]"); scanf("%*c"); //清空缓冲区
 scanf("%5f", &f);
 scanf("%*[^\n]"); scanf("%*c"); //清空缓冲区
 scanf("%22s", str);
 printf("n=%d, f=%g, str=%s\n", n, f, str);
 return 0;
}

输入示例 ①:

20↙
100.5↙
http://c.biancheng.net↙
n=20, f=100.5, str=http://c.biancheng.net

输入示例 ②:

8920↙
10.2579↙
http://data.biancheng.net↙
n=89, f=10.25, str=http://data.biancheng.

这段代码使用了多个 scanf() 函数连续读取数据,为了避免受到缓冲区中遗留数据的影响,每次读取结束我们都使用scanf("%*[^\n]"); scanf("%*c");来清空缓冲区。

限制读取数据的长度在实际开发中非常有用,最典型的一个例子就是读取字符串:我们为字符串分配的内存是有限的,用户输入的字符串过长就存放不了了,就会冲刷掉其它的数据,从而导致程序出错甚至崩溃;如果被黑客发现了这个漏洞,就可以构造栈溢出攻击,改变程序的执行流程,甚至执行自己的恶意代码,这对服务器来说简直是灭顶之灾。

在用 gets() 函数读取字符串的时候,有一些编译器会提示不安全,建议替换为 gets_s() 函数,就是因为 gets() 不能控制读取到的字符串的长度,风险极高。

2) 匹配特定的字符

%s 控制符会匹配除空白符以外的所有字符,它有两个缺点:

  1. %s 不能读取特定的字符,比如只想读取小写字母,或者十进制数字等,%s 就无能为力;

  2. %s 读取到的字符串中不能包含空白符,有些情况会比较尴尬,例如,无法将多个单词存放到一个字符串中,因为单词之间就是以空格为分隔的,%s 遇到空格就读取结束了。

要想解决以上问题,可以使用 scanf() 的另外一种字符匹配方式,就是%[xxx],[ ]包围起来的是需要读取的字符集合。例如,%[abcd]表示只读取字符abcd,遇到其它的字符就读取结束;注意,这里并不强调字符的顺序,只要字符在 abcd 范围内都可以匹配成功,所以你可以输入 abcd、dcba、ccdc、bdcca 等。

请看下面的代码:

 #include <stdio.h>
    int main(){
    char str[30];
    scanf("%[abcd]", str);
    printf("%s\n", str);
    return 0;
    }

输入示例 ①:


本文地址:百科问答频道 https://www.neebe.cn/wenda/938790.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • Excel中countif函数的使用方法

    Excel中countif函数的使用方法

    Excel中有很多函数,很多都可以为我们大大减少计算的时间,一步就得出结果,很多朋友在使用countif函数时,会出现一些错误导致不成功,我们这就来给你详细讲讲countif函数是应该如何使用的。countif函数的含义...

  • SUBTOTAL函数怎么用?

    SUBTOTAL函数怎么用?

    操作方法01隐藏行汇总方法:在目标单元格输入公式:=SUBTOTAL(109,C3:C9)。02筛选汇总。方法:在目标单元格输入公式:=SUBTOTAL...

  • tts是什么意思?tts有什么功能作用

    tts是什么意思?tts有什么功能作用

    tts是什么意思,tts有什么功能作用?TTS的全称为TextToSpeech,即“从文本到语音”。它是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经网络的设计,把文字智能地转化为自然语音流。TTS技术对文本文件进行实...

  • 函数库是什么意思?

    函数库是什么意思?

    函数库是指由一组编写好的、结构化的可执行函数组成的库文件,其中的函数可以增加程序的通用功能以提升程序的运行效率,节省开发时间并提高软件的质量。函数库更常用于缩短编程时间、提供程序实现通用功能以及用于程序编写中特定功能的实现。函数库有帮助程...

  • nas是什么意思啊(nas的作用)

    nas是什么意思啊(nas的作用)

    NAS(网络附属存储)是一个数据存储设备,用户可以用来保存照片、视频、音乐和文档。NAS用户可以仅由自己使用,可以与家庭/朋友或同事之间的大型团体共享。也可以从移动设备和计算机访问NAS。与网盘云服务相比,NAS会提供更大的便利性和趣...

  • 用数学画图软件——Graph绘制函数图形

    用数学画图软件——Graph绘制函数图形

    Graph是一款开源类的绘制函数图像软件。它不仅能根据函数绘制其图像,还能够绘制曲线上的切线、法线和阴影等。除了绘制功能,它还具有计算功能,其中包括曲线长度、面积等的计算。下面我来给大家介绍一下如何使用Graph绘制函数图像。操作方法...

  • 电脑中esc键的作用(电脑esc是什么键)

    电脑中esc键的作用(电脑esc是什么键)

    在win7系统中,朋友们对键盘上的某些按键有哪些功能,还不是很了解。这次六哥来谈谈win7系统中ESC键的各种功能,保证朋友们使用更加便捷。ESC键的简介:电脑键盘上的Esc键诞生于1960年,位于电脑键盘的左上方,英文单词escape的缩...

  • 手机蓝牙的作用和用法(手机蓝牙有什么用途)

    手机蓝牙的作用和用法(手机蓝牙有什么用途)

    每部手机上都有一个蓝牙功能,大家以前都会用它来传输文件,不过随着移动网络和WiFi的普及,这个功能也渐渐被大家忽略了。今天,我们就来科普一些手机蓝牙不为人知的功能,让大家可以更好的使用这一功能。1、传输文件传输文件,这一功能应该是大家最熟悉...

  • 周排行
  • 月排行
  • 年排行

精彩推荐