2014-03-13 212 views
0

此代碼的用途是計算輸入字符串中輸入字符的使用次數。計算字符串中的字符

代碼是這樣的它給出錯誤輸出K = 41由於數據類型範圍有限,警告比較總是錯誤的。

int main() 
{ 
    int i,k,x=0; 
    char ch; 
    char str[1000]; 
    printf("Write your Word!\n"); 
    gets(str); 
    printf("Write character to Search\n"); 
    scanf("%c",&ch); 
    x=strlen(str); 
    printf("%d",x); 
    printf("%d",k); 
      for(i=0;i!=x-1;i++){ 
      if(str[i]=='ch'){ 

       k++; }   
       }   
    printf("%d times used",k); 
    getch(); 

return 0; 


    } 
+2

'k'將不會被初始化 – tesseract

+2

比較警告是因爲'STR [1] =='ch''; 'str [i]'是一個字符,你*與2個字符*進行比較。 – pmg

+0

你未初始化的意思是什麼?我應該在哪裏發起k?如果循環? – user1944312

回答

0

的一些問題:你沒有初始化k和比較應該與可變ch,而不是持續'ch'。這應該工作(注意,我也改變了你的printf S表示乾淨的輸出):

int main() 
{ 
    int i,k=0,x=0; 
    char ch; 
    char str[1000]; 
    printf("Write your Word!\n"); 
    gets(str); 
    printf("Write character to Search\n"); 
    scanf("%c",&ch); 
    x=strlen(str); 
    printf("strlen = %d\n",x); 
    for(i=0;i!=x-1;i++){ 
     if(str[i]==ch){ 
      k++; }    
     }     
    printf("%d times used\n",k); 
    getch(); 
    return 0; 

} 
+1

''ch''不是一個字符串(也就是'「ch」');它是一個多字符'int'常量。 – pmg

+2

爲了完美,'gets()'不應該在那裏。它不會傷害使用'fgets()'來代替。 'gets()'是舊的,它很臭,並且應該從不**被使用。它甚至從C11中刪除。 –

+0

@pmg我的錯誤,我更正了答案 – trogdor