【发布时间】:2021-02-15 18:31:57
【问题描述】:
我正在研究 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()是否也将光标移动到第二行
感谢您的帮助!!!
【问题讨论】:
-
“将光标移到下一行”,也许你的意思是"consumes all available consecutive whitespace characters from the input"。
scanf()将为"%s "(带空格)执行此操作,但不适用于"%s"(无空格)。 -
scanf读取到换行符。fgets然后读了它并认为没有其他东西可以读。 -
scanf()在流中留下一个尾随换行符,稍后由fgets()使用。在scanf()之后打电话给getchar()应该适合这个 案例。 -
请注意
scanf("%s", name);并不比gets()更安全,永远不要使用它。两个输入都使用fgets()会更好。 -
不要发文字图片