2017-02-25 5 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; 
} 

나는 다음과 같은 출력 기다리고 있었다 : 문자열의의 문자 'D'의 발생 횟수 이후

3 

3.

입니다 여기에

프로그램입니다

프로그램을 실행하려고 할 때마다 화면에 다른 번호가 표시되었습니다. 예를 들어, 내가 프로그램을 한 번 실행하는 동안 다음과 같은 결과를 얻었다 :

-378387261 

을 그리고이 출력을 가지고, 프로그램을 다른 시간을 실행할 때 :

141456579 

나는 잘못된 출력을 얻을 이유는 무엇 방법 이 문제를 해결할 수 있습니까?

미리 감사드립니다.

+0

: 여기

코드인가? – stark

+0

@stark C에서 기본적으로 int가 0으로 초기화되었으므로 0이 될 것입니다. – 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에서 정수는 자동으로 0으로 초기화되지 않습니다. count 변수가 초기화되지 않는 문제가 있습니다.
find_c 함수의 count 변수를 0으로 초기화 해보십시오.

+0

고마워요! 그것은 효과가있다! @HappySnowman – Tree

+0

@Tree, 작동하는 경우 - 허용 대답으로 표시 – SergGr

+0

@ SergGr 방금 접수 된 답변으로 표시했습니다. – Tree