关于标准库函数scanf

时间:2010-05-07 18:37:13  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:值的,有些人可能很奇怪,怎么很少人用过scanf的返回值呢?scanf会返回成功接收到的变量数量的值。比如scanf("%d",&j"),与scanf("%d=",&j),如果接受成功的话返回值都是1我用如下语句作了测试#include <stdio.h>int main (){  int j;  printf ("%d",scanf("%dn",&j));  return 0;}如果你开始就输入回车,程序会继续等待你输...
  正文:

论坛上很多人对scanf的不太了解,导致程序出错,我想把scanf的具体用法贴出来,希望大家可以共同进步,有什么不对的地方可以提出来。
int scanf(char *format,...);
这应该是scanf的标准形式。先说说关于他的返回值的问题。
库函数几乎都是有返回值的,有些人可能很奇怪,怎么很少人用过scanf的返回值呢?
scanf会返回成功接收到的变量数量的值。比如scanf("%d",&j"),与scanf("%d=",&j),如果接受成功的话返回值都是1
我用如下语句作了测试
#include <stdio.h>
int main (){
  int j;
  printf ("%d",scanf("%dn",&j));
  return 0;
}
如果你开始就输入回车,程序会继续等待你输入,因为在输入数字的时候,scanf会跳过空白字符。(the c programming language 上说,scanf实际上是用getchar()接受由数字组成的字符串,再转换成数字)
如果我输入ctrl-z(unix上是ctrl-d)则会返回-1(随编译器而定).这实际上就是常量EOF的值,也就是所谓的返回eof
如果我键入的不是数字返回值就是0。但是如果我输入浮点数,又会怎么样呢?
我举的例子中同样会返回1,但是缓冲区会留下垃圾,如果是scanf("%d%d",&a,&b);则会出错。
这是可以使用一个库函数fflush(stdin)来清除缓冲。不过貌似雨中飞燕大姐说这个用法是非标准的。K&R,只是说行为没有定义,但我们可以使用while((c=getchar())!='n'&&c!=EOF);同样可以清除后面的垃圾
scanf的格式匹配还是比较简单,一定要记住的就是普通变量一定要加上&,否则编译器无法检测错误,但运行肯定会段错误。
    ┏━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃ 代 码 │          意                  义          ┃
    ┠────┼────────────────────────────┨
    ┃   %a   │读浮点值(仅适用于 C99)                        ┃
    ┃   %A   │读浮点值(仅适用于 C99)                        ┃
    ┃   %c   │读单字符                                 ┃
    ┃   %d   │读十进制整数                              ┃
    ┃   %i   │读十进制、八进制、十六进制整数                  ┃
    ┃   %e   │读浮点数                                 ┃
    ┃   %E   │读浮点数                                 ┃
    ┃   %f   │读浮点数                                 ┃
    ┃   %F   │读浮点数(仅适用于 C99)                        ┃
    ┃   %g   │读浮点数                                 ┃
    ┃   %G   │读浮点数                                 ┃
    ┃   %o   │读八进制数                                ┃
    ┃   %s   │读字符串                                 ┃
    ┃   %x   │读十六进制数                              ┃
    ┃   %X   │读十六进制数                              ┃
    ┃   %p   │读指针值                                 ┃
    ┃   %n   │至此已读入值的等价字符数                      ┃
    ┃   %u   │读无符号十进制整数                          ┃
    ┃ %[ ] │扫描字符集合                              ┃
    ┃   %%   │读 % 符号(百分号)                           ┃
    ┗━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ "关于标准库函数scanf"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/VC/2010-05-07/13925.html


关键字:

关于《关于标准库函数scanf》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td