scanf函数的用法

很多编程初学者在用scanf()函数的过程当中遇到不少的问题。比如:1:想要输入一个含有空格,tab键的字符串,该怎么办呢?2:当一不小心输入的数据与输入的格式不匹配,该如何从新输入呢?

    1: 对于第一个问题,很多人想直接通过scanf("%s",str); (str是一字符指针); 你会发现空格或者tab键后面的字符串并没有输入到str中。这是因为scanf遇到空格就默认为一个数据输入的结束。为了解决这个问题,我们可以用%[]的格式输入。例如:

#include "stdio.h"
int main()
{
char ch[100];
scanf("%[^/n]",ch);       //注意:/n前要有^符号
printf("%s/n",ch);
return 0;
}

输入:123 345 567↙

输出:123 345 567↙

 

2:当输入非法数据时,非法数据仍然存储在键盘缓冲区中,固然下面的输入也会受到了影响,这可能会导致整个程序瘫痪。比如

#include <stdio.h>
int main()
{
    int a;
    do
    {
        scanf("%d",&a);
        printf("a=%d/n",a);
    }while(a!=0);
}

本来是想通过输入0来结束程序。一不小心输入了一个非数字字符,这就导致了死循环。解决办法:我们可以根据scanf("%d",&a)的返回值来判断输入的数据是否与要求的格式一致,它的返回值为已匹配的数据的个数。如果返回值小于要输入的数据的个数,则表示这个输入错误。我们可以用fflush(stdin)把stdin输入流请空。例如:

#include <stdio.h>
int main()
{
    int a;
    int b;
    do
    {
        if(scanf("%d,%d",&a,&b)==2)      //输入的两个数据跟格式要求的一致
        {
            printf("a=%d,b=%d/n",a,b);
   }
   else                              //输入的输入不符合要求。
   {
             printf("a=%d,b=%d/n",a,b);
    fflush(stdin);                       
   }
    }while(a!=0);
}

输入:1,2↙            输出:a=1,b=2↙

           3,d↙                       a=3,b=2 ↙

           0,s↙                       a=0,b=2 ↙

3:键盘缓冲区残余信息问题

#include <stdio.h>
int main()
{
    int a;
    char ch;
    do
    {
        scanf("%d",&a);
        scanf("%c",&ch);
        printf("a=%d     c=%c/n",a,ch);
        printf("c=%d/n",ch);
    }while(ch!='0');
}

scanf("%c",&ch);并不能正常的接受输入字符,我们每次输入一个"Enter"键时,向键盘缓冲区发去一个“回车”(/r),一个“换行"(/n), /r被scanf()函数处理掉了,而/n被scanf()函数“错误”地赋给了c,解决办法:

再scanf()后面加上fflush(stdin);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值