@cromvvell

Как ввести строку без знака конца строки?

#include <stdio.h>

int main()
{
    char country[64] = "", city[16] = "";
    fgets(country, 64, stdin);
    fgets(city, 16, stdin);
    printf("The capital of the state of %s is the city of %s", country, city);
    return 0;
}


Почему при вводе при помощи fgets в конец строки записывается enter, если эта функция как раз и подразумевает ввод всего, что до enter?

Russia
Moscow
The capital of the state of Russia
is the city of Moscow


...Program finished with exit code 0
Press ENTER to exit console.
  • Вопрос задан
  • 792 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Ну да, всё верно:
Функция fgets() считывает до num-1 символов из файла stream и помещает их в массив символов, на который указывает str. Символы считываются до тех пор, пока не встретится символ «новая строка», EOF или до достижения указанного предела. По окончании считывания в массив str сразу после последнего считанного символа помещается нулевой символ. Символ «новая строка» при считывании будет сохранен и станет частью массива str.


А вот gets не сохраняет конец строки:
Функция gets() считывает символы из stdin и помещает их в массив символов, на который ука­зывает str. Символы считываются до тех, пока не встретится новая строка или EOF. Символ «но­вая строка» не делается частью строки, а транслируется в нулевой символ, завершающий строку.


но она небезопасна, поскольку нет ограничения на размер ввода.

можете просто обрезать последний символ:
country[strlen(country)-1] = 0
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы