亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用fgets讀取的行上的strcmp

用fgets讀取的行上的strcmp

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

3 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

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

從流中讀取字符并將它們作為C字符串存儲到str中,直到讀?。╪um-1)個字符或者到達換行符或文件結尾,以先到者為準。 換行符使fgets停止讀取,但它被認為是有效字符,因此它包含在復制到str的字符串中。 在讀取字符后,空字符會自動附加在str中,以表示C字符串的結尾。

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

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

或者將新行添加到測試字符串中。

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



查看完整回答
反對 回復 2019-07-25
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

\n當用戶按Enter鍵時,fgets會向用戶提供的字符串附加一個。你可以通過使用strcspn或只是添加\n到你想要比較的字符串的末尾來解決這個問題。

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)

但它并不那么優雅。


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 748 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號