如何正確比較字符串?我試圖讓一個程序讓用戶輸入一個單詞或字符,存儲它,然后打印它直到用戶再次鍵入它,退出程序。我的代碼看起來像這樣:#include <stdio.h>int main(){
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input);
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check);
}
printf("Good bye!");
return 0;}問題是我不斷打印輸入字符串,即使用戶輸入(檢查)與原始(輸入)匹配。我比較錯誤嗎?
3 回答
繁星coding
TA貢獻1797條經(jīng)驗 獲得超4個贊
您不能(有用)使用!=或比較字符串==,您需要使用strcmp:
while (strcmp(check,input) != 0)
這樣做的原因是因為!=并且==只會比較這些字符串的基址。不是字符串本身的內(nèi)容。
慕容森
TA貢獻1853條經(jīng)驗 獲得超18個贊
好的一些事情:gets不安全,應該更換,fgets(input, sizeof(input), stdin)以免你得到緩沖區(qū)溢出。
接下來,要比較字符串,必須使用strcmp,其中返回值為0表示兩個字符串匹配。使用相等運算符(即。!=)比較兩個字符串的地址,而不是它們中的個別字符串char。
并且還要注意,雖然在這個例子中它不會引起問題,也可以fgets將換行符存儲'\n'在緩沖區(qū)中; gets()才不是。如果您將用戶輸入與fgets()字符串文字進行比較,例如"abc"它永遠不會匹配(除非緩沖區(qū)太小,以至于它'\n'不適合它)。
編輯:再次被超級快速的神秘主義者擊敗。
- 3 回答
- 0 關(guān)注
- 1089 瀏覽
添加回答
舉報
0/150
提交
取消
