欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

fgets阻塞 stdin 退出_来自stdin问题的fgets[c]

发布时间:2023/12/9 77 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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]的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。