Appearance
从标准输入stdin获取格式化数据。
c
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);fscanf从指定的流中获取数据。sscanf从指定的字符串中获取数据。- 返回获取的数据个数。失败返回 EOF,并更新 errno。
scanf 不会吃掉回车按键, 所以导致连续调用的时候会让回车成为下一个 scanf 调用的输入.
可以用如下的方法吃掉回车:
- getchar()
- 抑制字符
- 在
%s前面加空格, 例如scanf(" %s", s);
c
int c;
while ((c = getchar()) != '\n' && c != EOF);在学习后标准 IO 的缓冲区后可以知道,这个问题产生于行缓冲区在遇到换行符的时候会刷新缓冲区造成的。