Как предлагается в комментариях, я рекомендую использовать отладчик для пошагового выполнения этой программы.Наблюдение за тем, что происходит, строка за строкой - лучший способ понять все, что происходит, и улучшить свои навыки кодирования.
Тем не менее, это поможет получить некоторое представление о том, что getchar
делает по умолчанию, когда у вас естьинтерактивная программа на большинстве систем.Когда вы в первый раз вызываете getchar
, он, в свою очередь, вызовет функцию операционной системы более низкого уровня, которая получит вход от стандартного входа (stdin
).Например, в Linux функция низкого уровня - это read
, которая будет получать входные данные от терминала.
В большинстве систем по умолчанию происходит то, что функция низкого уровня не будет возвращаться, пока не будет нажата кнопка ввода.Все, что было введено, будет возвращено обратно в терминал / консоль, так что вы увидите, что вы печатаете.
Как только вы нажмете ввод, getchar
вернет первый символ, относящийся к тому, что вы набрали.Если вы наберете более одного символа, ваш следующий вызов getchar
немедленно вернется со следующим набранным вами чатом.Обратите внимание, что в Linux, когда вы нажимаете Enter, это будет похоже на то, как вы набрали '\n'
, однако в Windows окончания строк различны, поэтому это будет похоже на '\r'
затем '\n'
.
Так что причина, по которой высм. две пустые строки, когда вы в первый раз нажмете ввод, потому что первая отражается вашей низкоуровневой функцией os, а вторая - вашим putchar
.getchar
вызывается снова, и ваша третья пустая строка исходит от эха.Четвёртое происходит от вашего printf
.
Я оставлю вторую часть для вас, чтобы выяснить самостоятельно.