Skip to content
On this page

scanf(3)


标签:clang/std_api  

从标准输入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 调用的输入.

可以用如下的方法吃掉回车:

  1. getchar()
  2. 抑制字符
  3. %s前面加空格, 例如 scanf(" %s", s);
c
int c;
while ((c = getchar()) != '\n' && c != EOF);

在学习后标准 IO 的缓冲区后可以知道,这个问题产生于行缓冲区在遇到换行符的时候会刷新缓冲区造成的。

Last updated: