第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用fgets讀取的行上的strcmp

用fgets讀取的行上的strcmp

C
慕工程0101907 2019-07-25 14:50:35
用fgets讀取的行上的strcmp我想比較兩個(gè)字符串。一個(gè)存儲(chǔ)在一個(gè)文件中,另一個(gè)從用戶(stdin)中檢索。這是一個(gè)示例程序:int main(){     char targetName[50];     fgets(targetName,50,stdin);     char aName[] = "bob";     printf("%d",strcmp(aName,targetName));     return 0;}在此程序中,strcmp輸入時(shí)返回值-1 "bob"。為什么是這樣?我認(rèn)為他們應(yīng)該是平等的。我怎樣才能得到它們呢?
查看完整描述

3 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

fgets讀取直到它看到換行符然后返回,所以當(dāng)你鍵入bob時(shí),在控制臺(tái)中,targetName包含“bob \ n”,它與“bob”不匹配。從fgets文件:(加粗)

從流中讀取字符并將它們作為C字符串存儲(chǔ)到str中,直到讀?。╪um-1)個(gè)字符或者到達(dá)換行符或文件結(jié)尾,以先到者為準(zhǔn)。 換行符使fgets停止讀取,但它被認(rèn)為是有效字符,因此它包含在復(fù)制到str的字符串中。 在讀取字符后,空字符會(huì)自動(dòng)附加在str中,以表示C字符串的結(jié)尾。

在比較之前,您需要從targetName的末尾刪除換行符。

int cch = strlen(targetName);if (cch > 1 && targetName[cch-1] == '\n')
   targetName[cch-1] = '\0';

或者將新行添加到測(cè)試字符串中。

char targetName[50];fgets(targetName,50,stdin);char aName[] = "bob\n";printf("%d",strcmp(aName,targetName));



查看完整回答
反對(duì) 回復(fù) 2019-07-25
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

\n當(dāng)用戶按Enter鍵時(shí),fgets會(huì)向用戶提供的字符串附加一個(gè)。你可以通過使用strcspn或只是添加\n到你想要比較的字符串的末尾來(lái)解決這個(gè)問題。

printf("Please enter put FILE_NAME (foo1, 2, or 3), ls, or exit: \n");fgets(temp, 8, stdin);temp[strcspn(temp, "\n")] = '\0';if(strcmp(temp, "ls") == 0 || strcmp(temp, "exit") == 0)

這只是取代了\n\0,但如果你想要懶惰,你可以這樣做:

printf("Please enter put FILE_NAME (foo1, 2, or 3), ls, or exit: \n");fgets(temp, 8, stdin);if(strcmp(temp, "ls\n") == 0 || strcmp(temp, "exit\n") == 0)

但它并不那么優(yōu)雅。


查看完整回答
反對(duì) 回復(fù) 2019-07-25
  • 3 回答
  • 0 關(guān)注
  • 737 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)