三九宝宝网宝宝教育教学论文

Linux C语言如何清除输入缓存

02月11日 编辑 39baobao.com

[C语言中一个关于清除屏幕的问题]#include<stdio.h> #include "stdlib.h" void main() { void abc(); int i; while(1) { printf("************************\n"); printf("1.打印“你好”\n2.退出\n"); printf("输入...+阅读

有的时候会遇到这样的一个问题,程序如下

#include

int main(void)

{

int a;

char b;

scanf("%d".&a);

scanf("%c",&b);

printf("%d\n",a);

printf("%c\n",b);

}

如果在终端上输入3

打印如下:

3

打印出一个3和一个空行,我们就输入了一个3,本来还应该再输入一个字符的,这是怎么回事。

原因是当我们输入3后又输入了个回车,C语言取字符都是在字符输入缓冲区中读取的,我们输入3后回车,C语言就把这个回车放在字符缓冲区中,所以第二个scanf读取的是字符缓冲区中的内容。

如果要解决一个最简单的方法就是把这个字符用getchar()读出来抛掉,这个就可以让我们第二次输入字符了,但getchar()只能读一个,如果字符缓冲区中的内容有多个,或者不知道多少个,这就不好办了。

还有一种方法就是在scanf上做文章,C语言的scanf这个输入函数是很奇怪的,如果我把第二个scanf改一下,改成scanf("

%c",&b);%c前面有个空格啊,这个空格是写在前面的,也就是在我们要输入之前,要读空白字符并忽略掉,如果你不输入一有效字符在终端不论按多少个回车空格tab等都是无效的,所以这样的scanf可以帮我们输入有效字符。

如果scanf写成scanf(" %c

",&b);,前后都有一个空格,前加空格已经说过了,那后面加空格会出现什么情,注意,如果在后加个空格,当我们输入一个有效字符回车,发现还没有输完,还要继续输入,这怎么回是。在后面加空格是把我们输入有效字符后面的空白字符忽略了,此时我们必须要输一个有效字符才能终止输入。

再来说一下整型,如果把第一个scanf改成

int c ;

scanf("%d,%d",&a,&c);

输入两个整型的变量,且%d与%d这间有个,号。这种情况下,你在输入第一个数字后必须原样输出一个,号,后面的输入才有效,如果在输入的时候不加,号,在你输入第一个整型数据后,忽略其它所有字符和数字除了,号,加,号后,与紧跟,号后的数据被读入到变量c中,大家可以试,当前,号可以是其它任可字符,%d前后都可以加其它字符,都要原样输出才行。

另外,还可通过加__fpurge(stdin)函数清空输入缓冲区,此函数在头文件中。

以下为关联文档:

汇编语言中清除屏幕语句是什么单独的清屏指令没有。高级语言中实现比较简单,有专门的清屏指令。 只能写子程序或者宏。 给你一个参考的: CLEAR MACRO push dx push cx push bx push ax mov ah,6 mov al,0 m...

关于清除小广告的实践心得小广告就像城市的垃圾, 随处乱贴,真是影响市容。 我所在的城市天津, 也是小广告的受害者。 很多小广告如办证之类的公然贴到公交车站站牌, 政府花了大力铲除, 并依靠社会的力量共...

C语言中有什么方法能清除一个数组中的全部空格第一种方法:利用指针 #include "stdio.h" main() { char testmac[20],*p; /*定义一个字符数组,一个指向字符变量的指针变量*/ gets(testmac);/*从键盘输入一个字符串*/ for(p=test...

C语言有没有清除局部屏幕的指令比如说我用scanf函数从键盘#include <stdio.h> #include <conio.h> int main() { int n=0; char c; while(c=getch()) { if(c=='\r') break; n*=10; n+=c-'0'; printf("*"); } printf("\n%d\n",n); return...

推荐阅读
图文推荐