2014-02-11 93 views
0

有一段時間沒有在C編程,所以我肯定在這裏錯過了一些東西,但我無法弄清楚它是什麼。測試字符串相等問題

我有兩個字符串,如下所示:

char toMatch[] = "--exit--"; 
char entry[1024]; 

通過這一方案,我有一個while循環接受用戶輸入以修改整個程序字符串entry。我想退出這個while循環時,entry等於toMatch

我認爲這很容易處理strcmp函數,但它不能正常工作。本來我有這個:

while(strcmp(entry, toMatch) != 0) { 
    // accept user input here to modify entry 
} 

但是,這並沒有奏效。所以我加了一行代碼再次接受用戶輸入之前清除的entry內容:

while(strcmp(entry, toMatch) != 0) { 
    memset(entry, 0, sizeof(entry)); 
    // accept user input here to modify entry 
} 

這也不起作用。我需要有entry這麼長時間,因爲用戶的輸入可以是任何比這更小的長度。我不知道爲什麼strcmp()不工作,所以我想我錯過了一些應該是顯而易見的東西。

+2

向我們展示要求輸入字符串的代碼片段 – Abend

+0

您知道== 0是相等的,並且<0 or > 0是不等式的,對嗎?除此之外,你是否打印出了兩個字符串的值 - 最好在字符之前和之後加上一個字符,比如''',以使空格可見 - 以確認你真的在比較你認爲的你比較? – keshlam

+0

用戶輸入可能以換行符結尾,嘗試將設置匹配爲「--exit - \ n」 –

回答

5

使用strcmp()是很容易的,如果你總是以零寫的比較明確:

  • strcmp(a, b) == 0平等
  • strcmp(a, b) != 0不等式
  • strcmp(a, b) >= 0a排序等於或之後b
  • strcmp(a, b) > 0a排序後b
  • strcmp(a, b) <= 0a排序等於或之前b
  • strcmp(a, b) < 0a排序前b

如果您有任何匹配"--exit--"對您輸入的問題,你有沒有脫光前導空格,尾隨空白,換行符(尤其是後者,如果你閱讀輸入fgets())。這是什麼顯示:

printf("[[%s]]\n", entry); 

方括號告訴你程序認爲字符串的末尾在哪裏。

+0

這就是問題所在,我有尾隨空白,這是導致問題的原因。 – Nuuou