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));

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
a \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)雅。
- 3 回答
- 0 關(guān)注
- 737 瀏覽
添加回答
舉報(bào)