scanf()和fgets()之间的区别

Bis*_*Das 33 c scanf fgets

我想知道fgets()和之间有什么区别scanf().我使用C作为我的平台.

Jon*_*ler 24

有许多不同之处.两个关键的是:

  • fgets()可以读取任何打开的文件,但scanf()只能读取标准输入.
  • fgets()从文件中读取"一行文本"; scanf()可用于此但也处理从字符串到内置数字类型的转换.

许多人将使用fgets()读取一行数据,然后用sscanf()它来剖析它.


小智 7

int scanf(const char * restrict format, ...);
Run Code Online (Sandbox Code Playgroud)

scanf(3)搜索由给定输入(称为stdin)上的format参数定义的特定模式,其中模式由您定义.scanf(3)的给定输入(取决于其变体(scanf,fscanf,sscanf,vscanf,vsscanf,vfscanf))可以是字符串或文件.

char *fgets(char * restrict str, int size, FILE * restrict stream);
Run Code Online (Sandbox Code Playgroud)

fgets(3)只是从输入文件流中读取一行,并将字节作为空终止字符串复制到缓冲区str,并将输出限制为缓冲区大小给定的字节.


Kel*_*ron 6

Scanf不执行边界检查.fgets可能是更好的选择.然后,您可以使用sscanf()来评估它.

这里对这个主题的讨论很好 - http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html

如何使用scanf输入空格?(那是我的邪恶双胞胎因为忘记了这一点而演讲 - 不是我)