Путаница по поводу fputs () - PullRequest
0 голосов
/ 30 апреля 2020
#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;
}

OUTPUT

Введите строку: punch
LiverpoolManchester

Но, когда я принимаю ввод от пользователя, он не дает ожидаемого вывода.

#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;
}

OUTPUT

Введите строку: punch
punch
punch

Единственное изменение между двумя кодами состоит в том, что я указывал строку в предыдущем один и во втором, я принимаю вклад от пользователя. Кто-нибудь может сказать мне причину этого ??

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Функция fgets читает до и до , включая символ новой строки.

Таким образом, буфер, который вы передаете в fputs, будет включать символ новой строки из fgets вызов, который, конечно, будет добавлять новые строки в выводе.

0 голосов
/ 30 апреля 2020

Проверьте эти две ссылки на функции fgets и fputs.

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

It поможет вам больше, чтобы прочитать их самостоятельно определенно. Но кажется, что при использовании fputs он автоматически не добавляет символ новой строки \n в конце вашей строки.

В вашем первом примере с указанием заданной строки c в жестком коде символ новой строки не добавляется. Когда вы используете fgets, он автоматически добавит \n в конце. Поэтому, когда вы выводите str вместо "Liverpool" или "Manchester", он сохраняет "punch\n", а не просто "punch".

...