scanf函数详解

引言:scanf函数虽然是学习C语言时比较早就接触的一个函数,但在使用过程中,发现真正掌握它却并不容易。本文就通过各种例子来详细的总结一下该函数的各种用法,假设它的调用格式为 scanf("<格式化字符串>",<地址表>)。


1、一般使用scanf函数时都是为某个变量赋值,不考虑它的返回值。但是任何函数都是需要返回的(即使返回类型用void,也可以认为只是调用了return语句,只是并没有返回什么东西而已),同样的scanf函数也是有返回的,它的返回值是成功读取变量的个数。如果有一个输入与变量格式不匹配,那么返回值为0。如:

  1. scanf("%d %d", &num1, &num2);   
如果输入两个中间有空格隔开的数字(如2 3),那么它的返回值是2。如果输入一个浮点数一个整数,则返回值是1。如果输入一个字符一个整数,则返回值是0。


2、scanf函数的<格式化字符串>与后面的<地址表>是必须严格匹配的。注意,是严格匹配,可以说不能有丝毫差别,但对于连续多个空格可以等同于一个空格。如:

  1. scanf("%d, %d", &num1, &num2);  
要想输入正确,必须输如一个整数,然后输入一个逗号(,),之后是第二个整数。最后是回车结束。


  1. scanf("%d,%d", &num1, &num2);  
该条语句中的<格式字符串>中的两个%d之间没有空格,如果此时输入:12 ,13回车(12后面先有一个空格后由逗号),那么num2并不等于13。反过来,输入:“12”、“,”、“空格”、“13”,则不会出现错误。


3、scanf函数用%s读取一个字符串时,其实它只能读取一个单词,因为遇到空格时,它会认为输入已结束。因此一般使用fgets来读取一个字符串。如果想用scanf函数读取带有空格的字符串时,需要使用参数%[ ]来完成,它的意思是读入一个字符集合。[ ]是个集合的标志,%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是“^”,这说明读取不在"^"后面集合的字符,既遇到"^"后面集合的字符便停止(这就是scanf函数里的正则表达式应用)。注意:此时读取的字符串是可以含有空格的。如:

  1. scanf("1123%s",&str);  
输入:1123aaabb 时str为 aaabb,但是,输入 24aabbdd时,   会出错,因为1123必须进行严格匹配。


  1. scanf("%[^\n]", &str);  
此时输入fdjkf fkdjf jdkf,然后输入回车,就给str赋值为 fdjkf fkdjf jdkf。

scanf("%[A-Z]",&str);输入除A到Z的任何字符(包括空格、回车)都会停止。


4、对于下面两条语句

  1. scanf("%d ", &num);/*scanf("%d\n", &num);*/  
  2. printf("%d",num);  
我们输入一个整数后,无论在输入多少个空格、回车、Tab,都没有输出;但是当再次输入非空白字符时,如输入2 然后输入空格然后输入4,最后输入回车,则会有输出。


5、于scanf函数的%c格式转换符,可以接受任何的非空白字符或空白字符(包括空格、回车、Tab甚至是F2这样的字符)

  1. char str;  
  2.   
  3. scanf("%c", &str);  
  4. printf("str = %c\n", str);  

如果输入:空格……/*……代表任意空白字符或非空白字符*/,则str被赋值为空格。

如果输入:回车,则str被立即赋值为换行字符‘\n’。

如果输入:fjdkfj,则str被赋值为f,f后面的jdkfj丢弃。

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
scanf函数C语言中用于从标准输入(键盘)读取数据的函数。它的基本用法是通过格式化字符串指定输入数据的类型和格式,并将读取到的数据存储到相应的变量中。 scanf函数的格式如下: ```c scanf("格式控制字符串", 参数列表); ``` 其中,格式控制字符串用于指定输入数据的类型和格式,参数列表是一系列变量,用于接收输入数据。下面是一些常用的格式控制字符串及其对应的数据类型: - %d:读取整数 - %f:读取浮点数 - %s:读取字符串 - %c:读取单个字符 例如,如果要从键盘读取一个整数并存储到变量num中,可以使用如下代码: ```c int num; scanf("%d", &num); ``` 注意,在读取整数时,需要使用取地址符`&`来获取变量num的地址,以便将输入数据存储到该地址中。 另外,scanf函数可以一次读取多个数据,并且可以根据需要使用多个格式控制字符串和参数。例如,如果要从键盘读取两个整数并存储到变量num1和num2中,可以使用如下代码: ```c int num1, num2; scanf("%d %d", &num1, &num2); ``` 在这个例子中,两个整数之间用空格分隔。 需要注意的是,scanf函数在读取数据时遇到空白字符(空格、制表符、换行符)时会停止读取,并且不会自动跳过空白字符。因此,在读取多个数据时,需要确保格式控制字符串中的空白字符与输入数据相匹配。 此外,scanf函数还可以进行一些其他的功能,如跳过输入数据、限制输入数据的长度等。具体的用法可以参考C语言的相关文档或教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值