Я попробовал ваш код и не могу воспроизвести проблему. Следующий код работает так, как вы ожидаете, он запрашивает имя, ждет, пока вы введете имя, затем запрашивает адрес и т. Д.
Мне интересно, не нужно ли вам читать stdin и очищать его, прежде чем запрашивать дополнительные данные?
typedef struct {
char* name;
char* address;
}employeeRecord;
int readrecord(employeeRecord &record)
{
char name[50];
char address[100];
printf("\nenter the name:");
fgets(name, sizeof(name), stdin);
record.nameLength = strlen(name) + 1;
record.name = malloc(sizeof(char)*record.nameLength);
strcpy(record.name,name);
printf("\nenter the address:");
fgets(address, sizeof(address), stdin);
...
}
Кстати, вы хотите добавить 1 к strlen (имя), а не вычесть 1. или, если вы хотите, чтобы имя сохранялось в вашей записи без завершающего нуля, вам нужно использовать memcpy для копирования строки в вашу запись, а не зЬгср.
Edit:
Я вижу из комментариев, что вы используете scanf
для чтения значения выбора, это оставляет \ n во входном буфере, который затем берется вашим первым вызовом fgets
. Вместо этого вам следует использовать fgets для чтения в строке выбора, а затем sscanf для анализа значения из входных данных. как это
int choice;
char temp[50];
fgets(temp, sizeof(temp), stdin);
sscanf(temp, "%d", &choice);
Это должно сделать весь вопрос о том, чтобы смыть стандартный stdin.