理解 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
的调用读取了一个空行。
切勿将 scanf
和 fgets
混合使用,否则会出现问题。 scanf
是格式化输入,而 fgets
只是原始输入。
我正在研究 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
的调用读取了一个空行。
切勿将 scanf
和 fgets
混合使用,否则会出现问题。 scanf
是格式化输入,而 fgets
只是原始输入。