파일안의 a로 시작하는 단어갯수 세는 프로그램인데요

cbers의 이미지

#include <stdio.h>

int main(int argc, char **argv)
{
        char temp1, temp2, temp3=0;
        FILE* file=fopen(argv[1], "r");
        int count_a=0, count_b=0;
        if(file==NULL){
                puts("file open error");
                return 1;
        }

        while(1)
        {
                temp1=fgetc(file);

                if(feof(file)!=0)
                        break;

                else if(temp1==' ' || temp1=='\t' || temp1=='\n')
                {
                        temp2=fgetc(file);

                        if(temp2=='a' || temp2=='A')
                        {
                                while(temp3!=' ' && temp3!='\t' && temp3!='\n')
                                        temp3=fgetc(file);
                                count_a++;
                                temp3=0;
                        }

                        if(temp2=='b' || temp2=='B')
                        {
                                while(temp3!=' ' && temp3!='\t' && temp3!='\n')
                                        temp3=fgetc(file);
                                count_b++;
                                temp3=0;
                        }
                        else
                                continue;
                }
                else
                        continue;
        }
        fclose(file);

        printf("A(a):%d\n", count_a);
        printf("B(b):%d\n", count_b);

        return 0;
}

그니까 제가 하고자한건 일단 fgetc로 문자를 계속 입력받습니다
그러다가 공백이 입력되면(단어의 구분기준은 공백이니까) 공백 바로다음의 문자를 입력받아 그것이 a,A 나 b,B 면 count_a나 count_b를 ++; 시키고
다시 계속 진행하는건데요..
count_a 는 잘나오는데 count_b 의 값이 계속 0인걸 보면
if문에서 뭔가 문제가 있나봅니다;; 지적좀해주세요..부탁드립니다

cinsk의 이미지

C FAQ: 12.2를 한 번 읽어 보시기 바랍니다. 또한 temp3에 값을 받는 while loop에서 EOF 검사를 하지 않는 버그도 고치기 바랍니다.

doldori의 이미지

더불어 temp1, temp2, temp3를 int로 선언해야 합니다.
그 이유는 C FAQs Q12.1에...

그런데 fscanf()와 %s를 쓰는 게 훨씬 쉽겠네요.

cinsk의 이미지

또 제대로 단어를 카운트하려면..

.... .... .... inter-
ested ... ... 

와 같이 줄에 걸쳐 있는 것도 고려하는 것이 품질 향상에 도움이 됩니다.