Извините, но я добавил несколько операторов print в ваш код во время работы на моем конце.
Я сделал следующее, чтобы избавиться от '\ n', оставшегося в буфере после scanf; и это дало мне хороший результат. Это то, что является root проблемы, я считаю. Нечистый буфер.
int c;
while ((c=getchar()) != '\n' && c != EOF);
Изменена программа, как показано ниже.
#include <stdlib.h>
#include <string.h>
int main()
{
struct DEP
{
char name[30];
char rank;
int number;
};
struct DEP *members;
int size, i, c;
scanf("%d", &size);
members = malloc(size * sizeof(struct DEP));
if(members == NULL)
{
return 1;
}
while ((c = getchar()) != '\n' && c != EOF);
for(i = 0;i < size;i++)
{
printf ("Enter Name: \n");
fgets(members[i].name, 30, stdin);
members[i].name[strcspn(members[i].name, "\n")] = '\0';
printf ("Enter rank and number: ");
scanf("%c %d", &members[i].rank, &members[i].number);
while ((c = getchar()) != '\n' && c != EOF);
printf("Name: %s\nRank: %c\nNum: %d\n", members[i].name, members[i].rank, members[i].number);
}
return 0;
}
Получен следующий вывод -
$ ./main.out
3
Enter Name:
siddharth
Enter rank and number: z 5
Name: siddharth
Rank: z
Num: 5
Enter Name:
sid
Enter rank and number: s 6
Name: sid
Rank: s
Num: 6
Enter Name:
sidhh
Enter rank and number: e 8
Name: sidhh
Rank: e
Num: 8