SCANF函数应用技巧(尤其%[]的用法)

 一.scanf函数输入格式中的字符串.

    scanf函数输入格式中也可以含有普通字符串, 但他的含义是这些字符必须在输入中出现
,例如:


          int num;
          Scanf("hello %d", & num);

   他的含义是首先要求输入一个hello字符串,然后再输入一个十进制数. 注意在等待输入时
忽略hello与要输入的数之间
的空格,制表符,回车. 因此这两种输入都是正确的:

          hello 1234
          hello1234


 
    二.scanf函数的返回值.


      看到一个学弟写的程序:

             #i nclude <stdio.h>
             main()
             {
                 int num;
                 printf("please input the student's score: ");
                 scanf("%d",&num);

                 if((num<0)||(num>100))
                 {
                      printf("The score put isnt fine. please run and input again.");
                 }
                 else if(num>90)
                 {
                      printf("The grade is A.");
                 }
                
                 else if((num>80)&&(num<90))
                 {
                     printf(..................
                     .............
                 }
                 ..............
                        
              }

          
      这个程序是没错,不过如果有人要存心捣乱, 输入时不是输入数字,而是其他的什么字
符,那么congratulations,
这个程序崩溃掉了. (^@^)          

      如何防止出现这种情况,有人通过把数字先读入到数组中,再判断读取的是不是一个数
字........., 作法真的好繁.

      如果知道scanf函数的返回值的话,这个问题就好办多了. scanf函数执行成功时的返回
值为成功读取的变量数,
如果第一个变量的读取既告失败则返回值为0.   
 
      哈哈哈,我们可以通过判断scanf函数执行的返回值,  可以制止用户不正确地输入,从
而控制程序的流程.

    把上面的程序改改:

     
             #i nclude <stdio.h>
             main()
             {
                 int num,int result=0;
                 printf("please input the student's score: ");
                  
                 while(result==0)
         {
     fflush(stdin);  /*  清空输入缓冲区. */
     if(result!=1)printf("Please input a digital score: ");
     result=scanf("%d",&num);  
           }
              ............................
              }
  
         一切OK!


    三.scanf函数中一个参数的应用.
 
   
   在scanf函数中,我们可以使用 %c来读取一个字符,使用 %s 读取一个字符串. 但是读取字
符串时不忽略空格,读字符串时忽略开始的空格,
并且读到空格为止,因此我们只能读取一个单词,而不是整行字符串.因此一般使用fgets来读
取一个字符串.

   其实scanf函数也可完成这样的功能,而且还更强大.

   这里主要介绍一个参数,%[ ] ,这个参数的意义是读入一个字符集合. [ ]是个集合的标
志,因此%[ ]特指读入此集合所限定的那些字符, 比如 %[A-Z] 是输入大写字母,一旦遇到不在
此集合的字符便停止. 如果集合的第一个字符是" ^ ", 这说明读取不在" ^ " 后面集合的字
符,既遇到" ^ " 后面集合的字符便停止.注意此时读入的字符串是可以含有空格的.

  Eg.  输入一个字符串, 这个字符串只含有小写字符.遇到第一个不是小写字符时停止.

      scanf("%[a-z]",str);

  Eg.  想输入一个字符串, 遇到 "." 停止,可设计如下:

     scanf("%[^.]", str);

    使用这个参数,你可以完成许多强大的功能

    点击这里打开原网址

    附加:感觉自己学的好少好少少少少。。。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值