Да, scanf
может быть хитрым. Для отладки подобных проблем может быть полезно вставить строку после scanf
, чтобы показать вам точно, каков был результат, например:
printf("scanf got character '%c' (0x%02x)\n", ch, ch);
, который покажет вам символ и цифру c значение этого символа, которое может быть полезно, если персонаж является чем-то экзотическим c, которое не имеет легко узнаваемого печатного вида.
Если вы сделаете это в этом случае, он скажет вам, что scanf("%c")
дал вам следующий найденный персонаж, который был символом новой строки. Это новая строка, которая все еще находилась во входном буфере, оставшаяся от конца входной строки, которая была проверена предыдущим вызовом scanf
в вашей функции attendance
.
Если вы хотите scanf
чтобы пропустить оставшиеся пробельные символы, включая символы новой строки, вы должны поставить пробел в начале строки формата scanf
. Так что измените свой существующий:
scanf("%c",&ch);
на
scanf(" %c",&ch);
, и это должно привести вас к желаемому поведению.