Код
while( (scanf("%c", &name[i])) == 1 ){
i++;
}
будет читать все символов, которые он может, он будет не останавливаться в конце mark
.
Следовательно, все четыре строки читаются этим циклом в name
, затем scan
вызывает после , которые терпят неудачу, потому что больше нет ввода, то есть age
, department
и key
значения остаются равными любому произвольному значению, которое они имели при создании.
Другими словами, ваш вывод можно объяснить следующим образом:
mark \
20 \
A >-- name
3.154 /
/
32766 -- age (and probably nul for department)
� -- key
Если вы хотите сделатьстрочный ввод, этот ответ предоставляет удобную функцию для этого, с защитой от переполнения буфера и так далее.Для строк вы просто используете их как введенные, в то время как нестроки можно конвертировать, используя sscanf
в буфере.