缓冲区
输入缓冲区于输出缓冲区
1.用户在键盘上输入的数字首先进入输入缓冲区,scanf标准函数从输入缓冲区里获得数字并记录到存储区里。
2.先进入输入缓冲区的数据必须首先被处理,如果用户输入的某些数据程序无法处理,程序就得不到用户以后输入的数据。如果用户输入的某些数据程序无法处理,程序就得不到用户以后输入的数据。
3.以下两条语句可以把输入缓冲区里第一个’\n’字符和它前面的内容都删除(相当于删除用户某一次输入的所有内容)。
scanf("%*[^\n]");双引号中的为正则表达式,非常复杂,背过就行。
scanf("%*c");
/*
* 输入缓冲区演示
* */
#include <stdio.h>
int main() {
int val = 0, val1 = 0;
printf("请输入一个数字:");
scanf("%d", &val);
scanf("%*[^\n]");
scanf("%*c");
printf("val是%d\n", val);
printf("请再输入一个数字:");
scanf("%d", &val1);
printf("val1是%d\n", val1);
return 0;
}
4.printf标准函数把要显示的内容放在输出缓冲区里,计算机在合适的时候把输出缓冲区里的内容显示在屏幕上。
在以下四种情况下计算机会把输出缓冲区里的内容显示在屏幕上:
1.如果输出缓冲区里包含'\n'字符就把它前面的内容显示在屏幕上
2.程序结束后计算机会把程序放在输出缓冲区里的内容显示在屏幕上
3.当输出缓冲区被充满的时候它里面的内容会显示在屏幕上
4.可以使用fflush(stdout)语句强制把输出缓冲区里的内容显示在屏幕上
5.scanf上面的printf可以显示的原因,有**fflush(stdout)**的功能,但scanf主要不是干这个的,所以没有写在前四条中。
/*
* 输出缓冲区演示
* */
#include <stdio.h>
int main() {
printf("1");
fflush(stdout);
while (1) {
}
return 0;
}
6.C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次的输入字符,造成无法正确的输入字符数据。以下有四种解决办法:
1. 在scanf()中使用’\n’屏蔽回车符号。
Scanf(“%d\n”,&n);
Scanf(“%c”,&c);
2. 在scanf()格式串最前面添加空格,屏蔽回车字符
Scanf(“%d”,&n);
Scanf(“ %c”,&c);//过滤回车
3. 在接收字符前,使用getchar()来读取一次回车符号
Scanf(“%d”,&n);
Getchar();
Scanf(“%c”,&c);
4. 在接收字符前,使用fflush()清空输入流的缓冲区中的内容
Scanf(“%d”,&n);
Fflush(stdin);//必须引入#include<stdlib.h>
Scanf(“%c”,&c);