C语言 看跌期权的功能

uz75evzq  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(137)

我试图理解如何把功能在标准的C工作。我读到,它打印一个指定的
字符串添加到标准输出中,并在此字符串后添加一个换行符。然而,我得到了两个类似C程序的不同输出。
我尝试了两种方法来使用它(我只提供函数main):
1.

char s[20];
fgets(s,20,stdin);
puts(s);

字符串

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


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

Hello World


(So在第二种情况下,在我的终端中,输出是:

Hello World


在这个例子中,似乎没有追加换行符,而我希望得到与案例1相同的输出。我不明白为什么输出不一样。可能是因为fgets,但我真的不明白为什么fgets使输出不同。

vcudknz3

vcudknz31#

第一个输出在传输的字符串末尾有两个换行符,而不是一个,第二个输出有一个换行符,而不是零。
在第一个输出中,第一个新行结束“Hello World”行,并将显示移动到下一行。第二个新行结束一个空白行。如果第二个新行不存在,那么终端输出(例如shell打印的提示)将出现在紧挨着“Hello World”的下一行,而不是在一个空白行之后。
在第二个输出中,换行符结束了“Hello World”行,并将显示移动到下一行。如果没有换行符,输出将继续在“Hello World”的同一行,而不是下一行。
第一个输出包含两个换行符,因为fgets在缓冲区中包含了它从输入字符串中读取的换行符,而puts添加了另一个换行符。

ql3eal8s

ql3eal8s2#

看起来让你困惑的行为不是puts,而是fgets。在第二个例子中,有一个换行符,只是没有一个空行。
如果fgets中的一行的解析因阅读一个换行符(而不是到达输入的文件结尾)而停止,则该换行符将包含在缓冲区中。
因此,在第二个例子中,s包含"Hello World",在第一个例子中,它包含"Hello World\n"
在这两种情况下,puts的行为是相同的,即追加一个新行。在第一个示例中,这导致打印两个连续的新行,显示为一个完全空白的行。

vfwfrxfs

vfwfrxfs3#

fgets会在有空间的情况下将输入的结尾换行符存储到目标数组中;这就是结果不同的原因。

相关问题