专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

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

来源:小易整编  作者:小易  发布时间:2023-03-24 02:40
摘要:scanf在C语言中的作用,scanf函数用法如果你想让自己的输入更加炫酷、更加个性化、更加安全,那么还需要学习scanf()的高级用法,这才是大神和菜鸟的分水岭。好了,言归正传,我们分三个方面讲解scanf()的高级用法。1)指定读取长度...
#include <stdio.h>
int main(){
int n;
char str[30];
scanf("%*d %d", &n);
scanf("%*[a-z]");
scanf("%[^\n]", str);
printf("n=%d, str=%s\n", n, str);
return 0;
}

输入示例:

100 999abcxyzABCXYZ↙
n=999, str=ABCXYZ

对结果的分析:整数 100 被第一个 scanf() 中的%*d读取后丢弃了,整数 999 被第%d读取到,并赋值给 n。此时缓冲区中剩下 abcxyzABCXYZ,第二个 scanf() 将 abcxyz 读取并丢弃,剩下的 ABCXYZ 被最后一个 scanf() 读取到并赋值给 str。

大家有没有意识到,将读取到的字符直接丢弃,这就是在清空输入缓冲区呀,虽然有点蹩脚,但是行之有效。在C语言基础——清空缓存区 中我们已经给出了使用 scanf() 清空缓冲区的方案,就是:

scanf("%*[^\n]"); scanf("%*c");

下面我们就来解释一下。

首先需要明白的是,等到需要清空缓冲区的时候,缓冲区中的最后一个字符一定是换行符\n,因为输入缓冲区是行缓冲模式,用户按下回车键会产生换行符,结束本次输入,然后输入函数开始读取。

scanf("%*[^\n]");将换行符前面的所有字符清空,scanf("%*c");将最后剩下的换行符清空。

有些网友将这两条语句合并起来,写作:

scanf("%*[^\n]%*c");

这是错误的。合并以后的语句不能清空单个换行符,因为该语句要求换行符前边至少要有一个其它的字符,单个换行符会导致匹配失败。

总结

scanf() 控制字符串的完整写法为:

%{*} {width} type

其中,{ } 表示可有可无。各个部分的具体含义是:

type表示读取什么类型的数据,例如 %d、%s、%[a-z]、%[^\n] 等;type 必须有。
width表示最大读取宽度,可有可无。
*表示丢弃读取到的数据,可有可无。

scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:

在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。

scanf 中双引号内,除了“输入控制符”外什么都不要写。

“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。

“输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理,这个稍后再讲。

使用 scanf 之前先用 printf 提示输入。

————————————————

scanf() 格式控制符汇总

格式控制符

说明

%c

读取一个单一的字符

%hd、%d、%ld

读取一个十进制整数,并分别赋值给 short、int、long 类型

%ho、%o、%lo

读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型

%hx、%x、%lx

读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型

%hu、%u、%lu

读取一个无符号整数,并分别赋值给 unsigned short、unsigned int、unsigned long 类型

%f、%lf

读取一个十进制形式的小数,并分别赋值给 float、double 类型

%e、%le

读取一个指数形式的小数,并分别赋值给 float、double 类型

%g、%lg

既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 类型

%s

读取一个字符串(以空白符为结束)

————————————————


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

共3页 1 2 3 当前是最后一页

IT问答
小编:小易整编
相关文章相关阅读
  • c语言的输入函数有哪些

    c语言的输入函数有哪些

    c语言的输入函数有:1、scanf()函数、从标准输入stdin读取格式化输入;2、getchar()函数,从标准输入stdin获取一个字符;3、gets()函数,从标准输入stdin读取一行;4、getch()函数,从stdin流中读取字...

  • c语言是什么意思

    c语言是什么意思

    一:c语言是什么意思C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言,以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低...

  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • 电容的作用

    电容的作用

    电容主要用于交流电路、脉冲电路中,在直流电路中电容器一般起隔断直流的作用。电容既不产生也不消耗能量,是储能元件。电容在电力系统中是提高功率因数的重要器件;在电子电路中是获得振荡、滤波、相移、旁路、耦合等作用的主要元件。电容在电路中起到四个作...

  • 什么是Linux系统中nc命令?nc命令的用法详解

    什么是Linux系统中nc命令?nc命令的用法详解

    这篇文章主要介绍了linux系统中nc命令的基本用法,nc命令非常之强大,这里先简单介绍它用来作端口扫描以及文件传输等的基础使用。功能说明:功能强大的网络工具,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小...

  • 功放ic的作用

    功放ic的作用

    功放ic的作用:1、信号放大,通过将输入信号放大到更高的功率级别,以便能够驱动扬声器或其他负载;2、电流放大,可以将输入的低电流信号放大为较高的电流输出,以满足负载的需求;3、保持信号质量,使放大后的信号保持原始信号的准确性和清晰度;4、控...

  • Excel函数学习之CHOOSE函数 vs IF函数

    Excel函数学习之CHOOSE函数 vs IF函数

    如果Excel函数圈也有江湖,那CHOOSE函数绝对算得上扫地僧。它不如IF函数那般威震江湖,但它的本领却更胜一筹。今天小花就带大家好好见识一下被大多数人冷遇的CHOOSE函数!   CHOOSE函数使用index_num返回数值参数列...

  • Matlab中length函数怎么用

    Matlab中length函数怎么用

    在matlab中,length函数用于返回向量、数组或字符串中的元素个数。以下是length函数的一些用法示例:1、返回向量中的元素个数:v = [1, 2, 3, 4, 5];  numElements = length(v); % 结果...

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

精彩推荐