@lxr

Почему fgets не работает второй раз?

Привет. Есть код:
int main() {
	char str1[5];
	char str2[3];
	
	fgets(str1,5,stdin);
	fgets(str2,3,stdin);
	printf("str1 = %s,   str2 = %s\n", str1, str2);

	return 0;
}

Я ожидаю, что при запуске введу слово из 5 букв, потом слово из 3, и программа выведет результат(введённые строки), но после ввода 1 слова сразу происходит следующее:
5d5e9fb12bd68900933271.png

Почему так происходит.
  • Вопрос задан
  • 575 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
char str1[5];
  char str2[3];

  fgets(str1,5,stdin);
  fgets(str2,3,stdin);

Я ожидаю, что при запуске введу слово из 5 букв, потом слово из 3

Чтение man fgets легко отвечает на этот вопрос:
fgets() reads in at most one less than size characters from stream
and stores them into the buffer pointed to by s.
Reading stops after an EOF or a newline.
If a newline is read, it is stored into the buffer.

Т.е. чтобы прочитать ровно 5 и ровно 3 символа, нужно вызывать fgets с аргументом размера 6 и 4 соответственно. Кроме того, когда первая строка заканчивается символом конца строки, этот символ тоже должен быть считан. Т.е. 7 и 5.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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