理解 C 中的 fgets() 函数

Understanding fgets() function in C

我正在研究 scanf() - 将光标移到下一行,所以很好奇 fgets 是否做同样的事情,但我得到的输出对我来说没有意义。请帮助我理解它

代码-

main()
{
char name[30] , name2[20];

scanf("%s" , name) ;
printf("%s" , name) ;
fgets(name2 , 30 , stdin) ;
printf("%s" , name2) ;

return 0 ;
}

输出- enter image description here

在第一行我输入了 premier 它在第二行给出了 premier 的输出但是它没有要求我第二次输入并且请澄清 fgets() 是否也将光标移动到第二行

感谢您的帮助!!!

scanf() :此函数扫描值直到下一个白色 space 或新行。 fgets() :此函数获取指定值或新行的上限值。(包括换行符)

在您的代码中,首先 word/line 通过 scanf 扫描它不会在终端上打印,因为 printf 函数将其存储在缓冲区中。下一个输入由 fgets 命令获取,printf 函数也将其值存储在缓冲区中。程序结束后,整个缓冲区将打印在终端上,因此您的输出不是预期的。 printf 功能仅 prints/flush 数据(清除缓冲区)如果您的程序关闭或新行出现。

在您的程序中添加“\n”以更好地理解

#include <stdio.h>
int main()
{
   char name[30] , name2[20];

   scanf("%s" , name) ;
   printf("%s\n" , name) ;
   fgets(name2 , 30 , stdin) ;
   printf("%s" , name2) ;

   return 0 ;
}

输出:

./a.out
Scaning fget started
Scaning
 fget started

第一个scanf不消耗行尾,只是一个字符串;所以对 fgets 的调用读取了一个空行。

切勿将 scanffgets 混合使用,否则会出现问题。 scanf 是格式化输入,而 fgets 只是原始输入。