-1
#include<stdio.h>
int main()
{
   char str[100];
   printf("Enter a string: ");
   fgets(str, sizeof(str), stdin);
   fputs("Liverpool", stdout);
   fputs("Manchester", stdout);
   return 0;
}

输出

输入字符串:打
利物浦曼彻斯特

但是,当我从用户那里获取输入时,它并没有给出预期的输出。

#include<stdio.h>
int main()
{
   char str[100];
   printf("Enter a string: ");
   fgets(str, sizeof(str), stdin);
   fputs(str, stdout);
   fputs(str, stdout);
   return 0;
}

输出

输入一个字符串 :
punchpunchpunch

两个代码之间的唯一变化是,我在前一个代码中指定了字符串,而在后一个代码中,我从用户那里获取了输入。谁能告诉我这背后的原因??

4

2 回答 2

2

fgets函数读取直到并包括换行符。

因此,您传递给的缓冲区fputs将包含fgets调用中的换行符,这当然会在输出中添加新行。

于 2020-04-30T06:15:14.440 回答
0

查看函数fgets和的这两个链接fputs

http://www.cplusplus.com/reference/cstdio/fgets/ http://www.cplusplus.com/reference/cstdio/fputs/

肯定会帮助您更多地阅读这些内容。但似乎在使用fputs它时不会自动\n在字符串末尾附加换行符。

在您的第一个示例中,通过指定硬编码的特定字符串,不添加换行符。当您使用 fgets 时,它会自动\n在末尾附加 a 。因此,当您输出str而不是存储时"Liverpool""Manchester"它不仅"punch\n"存储"punch".

于 2020-04-30T06:23:48.860 回答