• scanf深究


    例子:

    #include <stdio.h>
    #include <string.h>

    main()
    {
     char buffer[1024];
     scanf("%s", buffer);
     printf("%d/n", strlen(buffer));
     printf("%s/n", buffer);
    }

    如输入:------123-34回车      //  -代表空格符

     

    输出:

    3

    123

    ===============================================

    strlen(string)是有效字符的长度,不含有‘/0’  如"123", 则strlen(“123”)= 3

    scanf()函数输入字符串最后回车,将回车前的字符给字符串,系统在字符串尾还自动加个'/0',但最后的回车没有给他所以一般文件处理时还要加个getchar()用来存放回车符。

     

    一.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(..................
                         .............
                     }
                     ..............
                            
                  }

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

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

          如果知道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);

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

    #include <stdio.h>
    #include <string.h>
    main()
    {
     char buffer[1024] ;

     char string[1024]; 

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

     printf("%s/n", buffer);
     scanf("%[^9]", string);
     printf("%s/n", string);
     printf("%d/n", strlen(string));
     printf("%d/n", sizeof(buffer));
    }

  • 相关阅读:
    CentOS 7.X 关闭SELinux
    删除或重命名文件夹和文件的方法
    centos7-每天定时备份 mysql数据库
    centos7 tar.gz zip 解压命令
    MySQL5.6/5.7/8.0版本授权用户远程连接
    下载CentOS7系统
    使用js实现tab页签切换效果
    sql优化常用的几种方法
    mysql 多表联查的快速查询(索引)
    【图论】强连通分量+tarjan算法
  • 原文地址:https://www.cnblogs.com/huhu0013/p/3934668.html
Copyright © 2020-2023  润新知