关于scanf函数的初步学习与讨论

scanf函数

scanf函数,即输入函数,与getchar类似,但scanf函数是格式输出函数,即按指定的格式输入到所指定的变量,而getchar只能用作输入字符,这里对两者不同不做过多赘述。

首先,该函数是一种C语言函数,与printf等函数相同,都被声明在stdio.h文件中,用户可以通过使用该函数达到输入值以完成程序要求等目的。看下面的举例:

#include "stdio.h"
int main()
{
    int a;
    printf ("请输入一个值:");
    scanf ("%d",&a);
    printf ("您输入的值为:%d\n",a);
    return 0;
}

该例初步运用了scanf函数的输出功能,如用户输入10,便会输出:“您输入的值为:10”。

让我们根据该例解析一下scanf函数的模块。

“%d”是格式化说明符,简单来说,它决定了用户输入的值的类型,%d为整型,%f为浮点型,%c为字符型,格式化说明符还有很多,不过多举例。

逗号后面,是“地址表”。名字很抽象,但很好的表达了意思,&a的作用是对a取地址,可以这样来想:用户输入了值后,该值应该存放到哪里?如果用户想对a进行输入或修改,那输入的值就应该放在a变量里,于是,便要取到a的地址,让a“出现”在输入函数中,让计算机“明白”,输入的值应该存放到变量a中,这便是取地址。

关于scanf函数的返回值:

scanf函数拥有返回值,返回的是实际读取到的数据个数,如果读取失败,返回值为EOF(end of file)。

看下面的例子:

#include "stdio.h"
int main()
{
    int a,b;
    a=10;
    b=scanf("%d",&a);
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

在这个例子中,当输入修改a的值为100时,屏幕输出为100 1,“1”是b的值,即scanf的返回值为1。因为在本例当中,scanf函数值读取接收到了一个值——100,即修改输入a的值。同理,如果scanf中输入了两个数值:scanf("%d %d",&a,&b);那么返回值应为2。

到这里出现了两个问题:两个地址的scanf函数,能否只输入一个值?什么情况下会读取失败且返回值输出EOF?

关于第一个问题:当代码为scanf("%d %d",&a,&b)时,若用户只想输入一个值并输出,可进行如下操作:输入一个值后,回车,按ctrl+z便可只输出一个值。

  • 注:在visual中,需要连续按三次Ctrl+z,具体原因不详。

另:可将Ctrl+z看做结束scanf函数。

第二个问题:显然,不输入值便会导致失败,我们可以通过Ctrl+z达到目的,使其返回输出EOF,另外,EOF的本质为-1。

  • 如何利用返回值达到多次输入的目的?

来看下面的代码:

(图源自网络)

这里将while循环和scanf返回值相结合,达到了多次输入的目的,scanf返回值为1,即读取正常,且读取到一个数据,条件满足后做下面的if循环,退出时,可通过Ctrl+z使其输出EOF(-1)结束while循环。同理,将scanf("%d",&iq)==1改为scanf("%d",&iq)!=EOF也可达到相应目的。

另外,当我们的代码为:

scanf("%c", &a);
scanf("%c", &b);

输入第一个数据之后回车,程序默认回车字符作为你第二个数据,会直接输出,并不能继续输入第二个数据,所以,如果想要用这种方法进行连续输入,我们可以将其修改为:

scanf("%c", &a);
getchar();
scanf("%c", &b);

很好理解,输入完第一个数据后,按下回车,getchar函数会自动读取返回回车字符\n,这样便可以输入第二个数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值