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,并将输出限制为缓冲区大小给定的字节.
Scanf不执行边界检查.fgets可能是更好的选择.然后,您可以使用sscanf()来评估它.
这里对这个主题的讨论很好 - http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html
如何使用scanf输入空格?(那是我的邪恶双胞胎因为忘记了这一点而演讲 - 不是我)