Это то, что происходит, когда вы смешиваете fscanf
и fgets
.
Когда fscanf
читает число, оно останавливается прямо в конце этого числа, перед следующего символа новой строки. Когда впоследствии fgets
читает строку, он останавливается на следующем символе новой строки, который, к сожалению, следует сразу.
Если вы используете только fscanf
для чтения всех данных, проблем не будет. Это не тривиально, потому что некоторые из ваших имен содержат пробелы. Можно прочитать имя, содержащее пробел, используя fscanf
, например:
scanf("%[^\n]", studentArray[empty].department);
Если вы используете только fgets
для чтения всех данных, вы тоже будете в порядке. К сожалению, это тоже не тривиально: для чтения чисел требуется временный буфер.
char temp[42];
fgets(temp, sizeof temp, stdin);
sscanf(temp, "%d", &studentArray[empty].rank);