有一个在学习C语言初期困惑我的问题,先看代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int i;
char c;
scanf("%d", &i);
printf("i=%d\n",i);
//scanf 是行缓冲,匹配标准输入缓冲区的内容
scanf("%c", &c);
printf("c=%c", c);
/*为什么会出现阻断?
当缓冲区为空时,scanf才会阻塞,
\n 为一个字符,其在ascii中的值为10,所以scanf读到了'\n',缓冲区不为空
scanf的匹配规则:当scanf函数在读取整型数、浮点数、字符串时,会忽略'\n',空格等字符,即剔除这些字符,再阻塞。
但读取单个字符时,不会忽略任何字符,所以会读取还在缓冲区残留的'\n'*/
return 0;
}
在编译运行后发现第二次scanf没有阻塞,即没有读取到字符c。
这涉及到scanf匹配标准输入缓冲区的内容,当缓冲区为空时,scanf才会阻塞。'\n'为一个字符,其在ascii中的值为10,所以scanf读到了'\n',并非没有读取到字符,缓冲区不为空。
scanf的匹配规则:当sca