看跌期权的功能

问题描述 投票:0回答:2

我试图了解 put 函数在标准 C 中的工作原理。我读到它会打印指定的

string 到标准输出并向该字符串附加换行符。但是,我对 2 个类似的 C 程序得到了不同的输出。

我尝试了两种使用方法(我只会提供 main 函数): 1.

char s[20];
fgets(s,20,stdin);
puts(s);
char s[20]="Hello World";
puts(s);

在第一种情况下,如果我的输入是 Hello World,那么在我的终端中输出是:

Hello World

(因此添加了换行符) 在第二种情况下,在我的终端中输出是:

Hello World 

在这种情况下,似乎没有附加换行符,而我希望得到与情况 1 相同的输出。 我不明白为什么输出不一样。可能是因为 fgets,但我不太明白为什么 fgets 使输出不同。

c fgets ansi puts
2个回答
0
投票

看来让你困惑的行为不是

puts
,而是
fgets
。在第二个示例中,有一个换行符,只是没有空行。

如果通过读取换行符(而不是到达输入的文件末尾)来停止对

fgets
中行的解析,则该换行符将包含在缓冲区中。

因此,在第二个示例中,

s
包含
"Hello World"
,而在第一个示例中,它包含
"Hello World\n"

在这两种情况下

puts
的行为相同,都会添加换行符。在您的第一个示例中,这会导致打印两个连续的换行符,这显示为完全空白的行。


0
投票

您的第一个输出在传输的字符串末尾有两个换行符,而不是一个,第二个输出有一个,而不是零。

在第一个输出中,第一个换行符结束“Hello World”行并将显示移动到下一行。第二个换行符结束一个空行。如果第二个换行符不存在,则终端输出(例如 shell 打印的提示符)将出现在“Hello World”正下方的行上,而不是在空行之后。

在第二个输出中,换行符结束“Hello World”行并将显示移动到下一行。如果换行符不在这里,输出将在“Hello World”的同一行继续,而不是在下一行。

您的第一个输出包含两个换行符,因为

fgets
在缓冲区中包含从输入字符串读取的换行符,并且
puts
添加另一个换行符。

© www.soinside.com 2019 - 2024. All rights reserved.