Вызов scanf()
со спецификатором формата %d
извлечет только десятичные цифры и прекратит интерпретацию ввода для первого нецифрового символа.Однако он обычно не будет возвращаться вообще, пока не будет буферизована вся строка, поэтому будет как минимум новая строка в буфере и, возможно, другие нецифровые символы.
Оператор:
while ((garbage = getchar()) != EOF && garbage != '\n')
читает все буферизованные символы до конца строки или EOF.В то время как поток ввода с консоли может выдавать «конец файла», поток stdin может быть перенаправлен из файла и не должен ссылаться на ввод с консоли.EOF может быть вставлен в поток ввода консоли через зависящий от платформы код CTRL, и при перенаправлении из файла, если файл содержит строку без перевода строки, цикл не прерывается.
Использование isdigit(steps)
является неправильным - steps
является целочисленным значением, а isdigit()
проверяет одиночное символьное значение, чтобы определить, представляет ли оно десятичную цифру.steps
неявно является допустимым значением в силу того, что true
является ненулевым и спецификатором формата %d
, поэтому, если намерение состоит в том, чтобы определить, что было введено число, то для чего true
.