scanf输入字符和数字的问题

来源:互联网 发布:hex editor怎么修改mac 编辑:程序博客网 时间:2024/05/29 04:01

scanf是c语言中的常用函数,使用前导入stdio.h

这里讲一些经常遇到的问题。

首先要明白scanf的本质。当我们需要调用scanf输入的时候,输入的字符送到键盘缓冲区,然后scanf从中读取所规定的字符,比如我们scanf中要求的是%d,即数字型,那么属于数字的内容将被读取,当遇到不属于数字的内容时,扫描终止,比如我们输入的是5s5555,那么只有第一个5能接收,如果输入8   555,那么也只有第一个8能收到。但是没有收到的部分并不是被抛弃,而是继续保留在缓冲区中,当需要下一次scanf时,从缓冲区读数据。

1,字符串注意事项。

字符串需要注意的是,空格和回车也会被scanf认为是字符,所以,举个例子

#include <stdio.h>

int main(){

int a;

char b;

scanf("%d",&a);

scanf("%d",&b);

}

输入 8 回车

会发现程序即终止,原因是因为,当我们输入8然后回车时,回车符任然留在缓冲区,然后被scanf扫描给b。

还要注意的是scanf在接受字符串时候遇到空格也会终止,解决办法是限定扫描集合

scanf("%[^\n]s",str);或者是用gets函数

解决办法是getchar();或者是fflush(stdin);后者是将缓冲区清空;

2,数字

数字,可以容纳大小长度,如%4d,那么他限制四个位,如果不足没有关系,比如输入8s8888,那么只有第一个8,如果输入的位数超过那么只有前面四个

如88889999,只有8888;

阅读全文
0 0
原创粉丝点击