2012-12-14 4 views
0

C 프로그램을 사용하여 각 행의 문자 수를 찾고 싶습니다. 한 줄에 하나의 문장 만 있으면 잘 작동합니다. 그러나 여러 문장이 의미하는 경우, 그 뒤에 0이 추가됩니다. 내가 원하는 것을 얻기 위해 어떻게 코드를 수정할 수 있습니까? 미리 감사드립니다.C 행의 문자 수 계산

fp=fopen("chumma.c","r"); 
while((c=getc(fp))!=EOF) 
{ 
    cn++; 
    if((c=='\n') || (c==';')) 
    { 
     if((cn-1)==0) 
      em++; 
     n++; 
     printf("\nNo. of char in line %d : %d\n",n,(cn-1)); 
     ll[n-1]=cn-1; 
     cn=0; 
    } 
} 
+2

을하는 데 도움이 알려줘 어떤지 계산할 수 반복 'fgets()'. – imreal

+0

@ 닉하지만 fgets를 사용하면 해당 행의 문자 수를 계산할 수 없습니다. 나는 그것을 계산할 필요가있다. – Gomathi

+1

문자를 세는 경우'fgets' 다음에'strlen'을 사용하십시오 –

답변

0

다음 코드는 약간 둥근 것처럼 보이지만 작동합니다. 누구든지 그것을 간단하게 할 수 있다면, 알려주세요. 감사.

while((c=getc(fp))!=EOF) 
{ 
    cn++; 
    if(c==';') 
    { 
    n++; 
    printf("\nNo. of char in line %d : %d\n",n,cn); 
    ll[n-1]=cn; 
    cn=0; 
    flag=1; 
    } 

    if(c=='\n') 
    { 
    if(flag==1) 
    { 
     flag=0; 
     cn--; 
    } 

    else{ 
     if((cn-1)==0) 
     em++; 
     n++; 
     printf("\nNo. of char in line %d : %d\n",n,(cn-1)); 
     ll[n-1]=cn-1; 
     cn=0; 
    } 
    } 
} 
0

이 항목을 사용해보세요. 컴파일하지 않았지만 제대로 작동합니다. 는 fgets와

char buffer[1024]; 
fp=fopen("chumma.c","r"); 
while(fgets(buffer, 1024, fp)) 
{ 
    n++; 
    cn = strlen(buffer); 
    printf("\nNo. of char in line %d : %d\n",n,cn); 
} 
+0

파일의 문자 수를 알지도 못합니다. – phaazon

0

: 그런

char buffer[MAX_BUFFER]; 

fp=fopen("chumma.c","r"); 
while (fgets(buffer, MAX_BUFFER, fp)) { 
    cn = strnlen(buffer,MAX_BUFFER); 
    n++; 
    printf("\nNo. of char in line %d : %d\n",n, cn); 

} 

뭔가.

+0

그러나 한 줄로 된 여러 문장에서는 작동하지 않습니다. – Gomathi

+0

@Gomathi strtok()을 사용하여 줄을 ';'으로 토큰화할 수 있습니다. 각 토큰의 길이를 찾아 합산하십시오. – CCoder

+0

fgetpos를 사용하지 않고 선형 시간 strlen을 잃어 버리는 이유는 무엇입니까? – xaxxon

0

다음 코드가 유용합니다. 나는 비록 컴파일하지 않았다.

#define SIZE 1024 
char buffer[SIZE]; 
char * pch; 
int cn = 0; 

fp=fopen("chumma.c","r"); 
while (fgets(buffer, SIZE, fp)) 
{ 
    pch = strtok (buffer,";"); 
    while (pch != NULL) 
    { 
    cn += strnlen(pch,SIZE); 
    pch = strtok (NULL, ";"); 
    } 
    n++; 
    printf("\nNo. of char in line %d : %d\n",n, cn); 
    cn = 0; 
} 

희망이 있습니다.

+0

여전히 동일한 출력입니다. – Gomathi

+0

지금도 여러 문장을 고려하지 않았습니다. – Gomathi

+0

'while (strchr (buffer, ';')) cn ++'은 어떻습니까? –

0

좋아, 난 정말 코드를 잊었하지만 난 여전히 당신에게 확실히 도움이 될 것입니다 매우 소리 논리를 제공 할 수 있습니다. 당신이 문자 포인터에 대해 아무런 문제가 없다고 들었다면.

1) fopen을 사용하여 파일을 엽니 다. 2) endofile EOF까지 루프를 시작하고 파일의 전체 내용을 배열에 채 웁니다. 3) 해당 배열의 시작 위치가있는 문자 포인터를 만들고 '\ 0'// 해당 배열의 끝 문자까지 루프 안에 넣습니다. 각 포인터의 값을 사용하여 4)는 각 요소 (숫자 또는 알파벳 --ASCII 비교)

그 사용하는 것이 더 좋을 것이다