C语言学习——深入探究scanf

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。从初学c到现在不知道用了多少次scanf但从未深究过scanf的返回值。本篇将深入探究下scanf返回值。

一、函数原型

int scanf(const char * restrict format,...);

函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。 [1] 

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

二、返回值

从stdio.h里面可以发现scanf不但有返回值而且返回值为int型。

那么scanf的返回值究竟是什么呢? 先看两个例子

  1 #include<stdio.h>
  2 int main()
  3 {
  4     int a;
  5     printf("%d\n",scanf("%d",&a));
  6     return 0;
  7 }   
~      

运行结果

当输入的值与格式控制相符时返回值为1反之为0。

  1 #include<stdio.h>
  2 int main()
  3 {
  4     int a,b,c;
  5     printf("%d\n",scanf("%d %d %d",&a,&b,&c));
  6     return 0;
  7 }   

运行结果

上原意是要输入三个int型值。但实际输入时,第一次输入三个int型值,scanf返回3,第二次输入两个int型第三个为字符scanf返回2,由此可知scanf的返回值为正确输入的数据项数。但是,当我们的输入为w 1 2时,scanf返回值为0,这是为什么呢?再来看一个例子:

  1 #include<stdio.h>
  2 int main()
  3 {
  4     int a,b,c;
  5     char s;
  6     printf("%d\n",scanf("%d %d %d",&a,&b,&c));
  7     scanf("%c",&s);
  8     printf("%c\n",s);
  9     return 0;
 10 }

 运行结果

当输入的值与scanf格式控制不符时,此值会滞留在缓冲区所以 ,输入1 w e后第二句scanf并没有等待用户输入而是将上一次输入滞留的w读入。所以上文中当我们输入w 1 2时计算机将输入w读入然后与第一个格式控制“%d”进行匹配发现不符然后再与第二个“%d”进行匹配仍然不符再与第三个匹配仍不符,返回0,结束。

参考:《C专家编程》

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值