我试过你的代码,但无法重现问题。以下代码的工作方式正是您所期望的,它会提示您输入名称,等待您键入名称,然后提示您输入地址,等等。
我想知道你是否不需要在提示输入更多信息之前阅读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);
...
}
顺便说一句,您想在strlen(name)中加1,而不是减去1。或者,如果希望名称存储在记录中而不带终止空值,则需要使用memcpy将字符串复制到记录中,而不是strcpy。
编辑:
我从你的评论中看到
scanf
要读取选择值,这将在输入缓冲区中留下一个,然后由第一个
fgets
打电话。相反,您应该使用fgets读取选择行,然后使用sscanf解析输入中的值。这样地
int choice;
char temp[50];
fgets(temp, sizeof(temp), stdin);
sscanf(temp, "%d", &choice);
这应该会使冲洗stdin的整个问题变得毫无意义。