2015-04-28 123 views
2

我有一個顯然很容易的問題,但我只是不明白我做錯了什麼。 我有一個代碼,將測試控制檯中輸入的60個字符的文本,如果在該文本中出現「恐怖主義」字樣,它將提示「可疑文本」消息,當該字未出現時,將顯示「沒有可疑」。 輸入「模式」的文本應在輸入單詞「完成」時結束。這似乎是我的問題,因爲我的while循環不想結束。爲什麼「while」循環在滿足條件時沒有結束?

任何提示?

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
#include <stdlib.h> 

int start_with (char *sir1, char *sir2) 
{ 
    int i,j,k; 
    int len_sir2=strlen(sir2); 
    char sir3[60]=""; 
    for (i=0;i<=len_sir2;i++) 
    { 
     sir3[i]=sir1[i]; 
    } 
    k=(strcmp(sir2,sir3)) ? 0:1; 
    return k; 
} 

int main() 
{ 
    char *txt1; 
    char sir1[60]="", sir2[60]="terorist", sir_test[60]="done"; 
    int i,j,lensir1, contor=0,buf_de_la=0, buf_la; 

    while (sir1!=sir_test) 
    { 
     printf("Enter desired text and press ENTER \n"); 
     gets(sir1); 
     printf("\n"); 
     buf_la=strlen(sir1); 
     char *txt1="Nothing suspect"; 
     while (buf_de_la<buf_la-7) 
     { 
      char sirbuf[60]=""; 
      j=buf_de_la; 
      for (i=0;i<=7;i++) 
      { 
       sirbuf[i]=sir1[j]; 
       j=j+1; 
      } 

      if (start_with(sirbuf,sir2)==1) 
      { 
       txt1="SUSPECT text entered!"; 
       break; 
      } 

      buf_de_la=buf_de_la+1; 

     } 
     printf("%s\n",txt1); 
     getch(); 
     system("cls"); 
    } 

    return 0; 


} 
+3

STRCMP是你的朋友 – Morb

+0

但還是......我有我的SIR1可變文本「做」裝(爵士[0 ] =「d」,sir [1] =「o」等),我可以看到調試值,但是strcmp(sir1,「done」)或strcmp(sir1,sir_test)返回0。不是1? – BogdanM

回答

10

你應該使用strcmp,這樣

while (strcmp(sir1, sir_test) != 0) 

這是因爲當你做sir1!=sir_test,您實際測試的是,如果這兩個字符數組都指向同一個比較C風格字符串地址在內存中,這是不正確的,因爲它們是位於兩個不同內存地址的兩個不同的字符數組。

相反,您要做的是比較每個變量存儲空間中包含的字符,這就是strcmp所做的:它會逐字符比較字符,直到找到空終止字符。

+0

感謝您的詳細解答。 @ al-Acme給了我提示...... – BogdanM

+0

但是......我還爲我的sir1變量加載了文本「done」(sir [0] =「d」,sir [1] =「o」等) ,我可以看到調試的值,但是strcmp(sir1,「done」)或strcmp(sir1,sir_test)返回0.它不是1的任何原因? - BogdanM 3分鐘前編輯 – BogdanM

+0

@BogdanM strcmp返回(摘自文檔):'如果lhs和rhs比較相等,則爲零。所以你正在得到正確的結果。 – streppel

5

而不是while (sir1!=sir_test),試試這個:while (strcmp(sir1,sir_test))strcmp,strcmpi等是用於字符串比較的正確函數。它們在string.h頭文件下聲明。

3

問題出在您的比較while (sir1!=sir_test)這是錯誤的。它實際上比較了兩個字符串的地址。您可以使用strcmp或其他各種形式的相同函數來比較字符串。

一個小的變化,這可以使你的代碼工作如下..

do{ 
     printf("Enter desired text and press ENTER \n"); 
     . 
     . 
     . 
     system("cls"); 
} 
while (strcmp(sir1,sir_test)); 
相關問題