2017-02-25 31 views
1

我試圖編寫一個程序來計算給定字符串中給定字符的出現次數。爲什麼我得到錯誤的輸出,我該如何解決這個問題?

這裏的程序:

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

int find_c(char s[], char c) 
{ 
    int count; 
    int i; 
    for(i=0; i < strlen(s); i++) 
     if(s[i] == c) 
      count++; 
    return count; 
} 

int main() 
{ 
    int number; 
    char s[] = "fighjudredifind"; 
    number = find_c(s, 'd'); 
    printf("%d\n",number); 
    return 0; 
} 

我期待下面的輸出:

3 

因爲在字符串s字符 'd' 的出現次數爲3

每次我嘗試運行程序時,屏幕上都會顯示不同的數字。例如,我得到了下面的輸出運行程序一次,而:

-378387261 

,並得到這個輸出,運行程序時的另一個時間:

141456579 

爲什麼我得到錯誤的輸出,以及如何我能解決這個問題嗎?

提前致謝!

+0

什麼樣的價值是在計數循環開始之前? – stark

+0

@stark我猜這是0,因爲在默認情況下將int初始化爲零C – Tree

+0

非靜態本地(a.k.a *自動*)變量未初始化,它們的值爲* indeterminate *。在沒有初始化的情況下使用它們會導致*未定義的行爲*。 –

回答

2

那麼,你的代碼是好的。唯一的錯誤是,您沒有將計數初始化爲0.如果您未初始化變量將保存垃圾值,您將對該值執行操作。因此,在之前的情況下,每次執行程序時都會得到所有垃圾值。

下面是代碼:

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

int find_c(char s[], char c) { 
    int count=0; 
    int i; 
    for(i=0; i < strlen(s); i++) 
    if(s[i] == c) 
     count++; 
     return count; 
} 

int main() { 
    int number; 
    char s[] = "fighjudredifind"; 
    number = find_c(s, 'd'); 
    printf("%d\n",number); 
    return 0; 
} 
+0

非常感謝您的清晰和詳細的解釋 它的工作! – Tree

+0

@ sreepurna當然,其實我已經做到了:) 謝謝! – Tree

+0

@ sreepurna是的,你是對的。我剛剛標記了:) 你剛剛教會了我一些新的東西。謝謝! – Tree

2

在C中整數不會自動初始化爲零。 問題是count變量未初始化。
嘗試初始化find_c函數中的count變量爲零。

+0

非常感謝!有效! @HappySnowman – Tree

+0

@樹,如果它的工作 - 將它標記爲接受的答案 – SergGr

+0

@ SergGr我剛剛標記爲接受的答案:) – Tree