日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/9 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fgets阻塞 stdin 退出_来自stdin问题的fgets[c] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我試過你的代碼,但無法重現(xiàn)問題。以下代碼的工作方式正是您所期望的,它會提示您輸入名稱,等待您鍵入名稱,然后提示您輸入地址,等等。

我想知道你是否不需要在提示輸入更多信息之前閱讀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

要讀取選擇值,這將在輸入緩沖區(qū)中留下一個,然后由第一個

fgets

打電話。相反,您應該使用fgets讀取選擇行,然后使用sscanf解析輸入中的值。這樣地

int choice;

char temp[50];

fgets(temp, sizeof(temp), stdin);

sscanf(temp, "%d", &choice);

這應該會使沖洗stdin的整個問題變得毫無意義。

總結(jié)

以上是生活随笔為你收集整理的fgets阻塞 stdin 退出_来自stdin问题的fgets[c]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。