파일안의 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 ... ... 

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.