fgets阻塞 stdin 退出_来自stdin问题的fgets[c]
我试过你的代码,但无法重现问题。以下代码的工作方式正是您所期望的,它会提示您输入名称,等待您键入名称,然后提示您输入地址,等等。
我想知道你是否不需要在提示输入更多信息之前阅读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的整个问题变得毫无意义。
总结
以上是生活随笔为你收集整理的fgets阻塞 stdin 退出_来自stdin问题的fgets[c]的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 上海城市坐标系转换的空间校正方法(附控制
- 下一篇: css判断不同分辨率显示不同宽度布局实现