谈谈scanf函数的几个使用技巧

    技术2022-05-11  163

    谈谈scanf的几个使用技巧    "哈哈哈,各位高手菜鸟,今天,我来主讲scanf函数的一些用法","什么什么,这小子是不是欺负我们不识字呀!","scanf谁不会!".....台下一大堆臭鸡蛋,烂番茄如下雨般扔上台来,有人喊"这小子铁定欠扁","一定是想来骗稿费!"。。。。。。。。。。。(作者:冤枉呀!写这种冬冬那里有钱可赚,我已穷的快卖血了,呜。。。。。。。。。。。") -------------------------------------------------------------------------------- -------------------------------------------       今天主要谈三个问题:    一.scanf函数输入格式中的字符串.     scanf函数输入格式中也可以含有普通字符串, 但他的含义是这些字符必须在输入中出现 ,例如:           int num;           Scanf("hello %d", & num);    他的含义是首先要求输入一个hello字符串,然后再输入一个十进制数. 注意在等待输入时 忽略hello与要输入的数之间 的空格,制表符,回车. 因此这两种输入都是正确的:           hello 1234           hello1234       二.scanf函数的返回值.       看到一个学弟写的程序:              #include <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函数执行的返回值,  可以制止用户不正确地输入,从 而控制程序的流程.     把上面的程序改改:                    #include <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);      使用这个参数,你可以完成许多强大的功能呦! -------------------------------------------------------------------------------- ----------------------------------------    各位父老乡亲们, 这就是本人在用scanf函数时的一点小心得.............. (台下想起如雷的吼声,"这么简单的东西,你当我们是白痴呀!","退门票,退门票!",顿时,作者 被一大堆飞来的臭鞋掩埋............)    作者的话: 这是我的第一篇技术文章, 肯定会有一些错误,欢迎大家的指点. 其实我更喜欢C++, 也许以后会写一些C++的文章,欢迎高手的指点.         如果能或得大家的支持的话, 我会继续写的. (^-^)                                                   作者: hyqryq         再说几句:  通常来讲,scanf函数和他的一些参数并不是很常用,主要是因为:               1.许多系统的scanf函数都有漏洞. (典型的就是TC再输入浮点型时有时会出 错).               2.用法复杂,容易出错.               3.编译器作语法分析时会很困难,从而影响目标代码的质量和执行效率.            

    最新回复(0)