关于fputs()的混淆 #包括 int main() { char-str[100]; printf(“输入字符串:”); fgets(str,sizeof(str),stdin); fputs(“利物浦”,stdout); fputs(“曼彻斯特”,标准杜特); 返回0; }

关于fputs()的混淆 #包括 int main() { char-str[100]; printf(“输入字符串:”); fgets(str,sizeof(str),stdin); fputs(“利物浦”,stdout); fputs(“曼彻斯特”,标准杜特); 返回0; },c,fputs,C,Fputs,输出 输入字符串:打孔 利物浦和曼彻斯特 但是,当我从用户那里获取输入时,它并没有给出预期的输出 #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("Liverpool", stdout);
   fputs("Manchester", stdout);
   return 0;
}
#包括
int main()
{
char-str[100];
printf(“输入字符串:”);
fgets(str,sizeof(str),stdin);
fput(str、stdout);
fput(str、stdout);
返回0;
}
输出

输入字符串:打孔
打孔
冲床

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

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


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

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

这将有助于你阅读这些自己肯定。但是,使用
fputs
时,它似乎不会自动在字符串末尾追加换行符
\n


在第一个示例中,通过指定硬编码的特定字符串,不会添加换行符。使用fgets时,它将自动在末尾附加一个
\n
。因此,当您输出
str
而不是
“利物浦”
“曼彻斯特”
时,它存储的是
“punch\n”
而不仅仅是
“punch”

“它没有给出预期的输出”。您希望输出是什么?输出中的差异显然意味着第二个示例中的字符串包含换行符。这是必须的。果然,如果您查看
fgets
的手册页,就会发现其中包含换行符。尝试更仔细地阅读功能手册页。它准确地描述了
fgets
的工作原理。
#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;
}