@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

Почему так происходит.
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 1 000 до 1 800 usd.
iGooods.ru Санкт-Петербург
от 170 000 до 250 000 руб.
SBI Bank Москва
от 120 000 до 170 000 руб.