doublench21
@doublench21

Почему выводит остаток строки ?

char str_[32];
fgets(str_, 30, stdin);
printf("%s\n", str_);


Если вводить строки меньшей длины, то вроде бы все нормально. Правда иногда идет запрос строки несколько раз подряд без вывода. Тоже не пойму почему.
Ну а главная проблема, это то, что если я ввиду строку большей длины, то он её обрежет. Выведет положенное количество и тут же ниже выводит всё что осталось. Как это объяснить ??? Ubuntu ?
  • Вопрос задан
  • 2458 просмотров
Решения вопроса 1
Ext4
@Ext4
printf("%s\n", str_);
Я думаю проблема в этом месте.
Попробуйте выводить так:
printf("%s", str_);
И вот принцип работы fgets():
Функция fgets() читает из входного потока stream не более num-1 символов и помещает их в массив символов, адресуемый указателем str. Символы читаются до тех пор, пока не будет прочитан символ новой строки или значение EOF, либо пока не будет достигнут заданный предел. По завершении чтения символов сразу же за последним из них размещается нулевой символ. Символ новой строки сохраняется и становится частью массива, адресуемого элементом str.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@neolink
char str_[32] = {0};
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как это объяснить

судя по всему код у вас выполняется в цикле. Вы вводите строку и нажимаете enter -- fgets читает первые 30 символов, оставляя остальное в буфере ввода -- printf их выводит, цикл начинается снова, fgets читает 30 следующих символов -- то что осталось в буфере после предыдущего чтения. Если хотите очистить буфер используйте fflush(stdin).
Ответ написан
Комментировать
@iwanerhov
Программист С/C++
void PrintStr(const char *str)
{
   int size = strlen(str);
   for(int i = 0; i < size; ++i)
      std::cout << str[i];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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