2009-12-28 5 views
1

C, char에 의한 파일을 읽고 있는데 2 개의 연속 문자를 가져와야합니다. 누군가 제게 몇 가지 옵션을 제안 해 주시겠습니까?스트림에서 2 개의 연속 문자를 얻으려면 어떻게해야합니까?

프로그램의 주요 아이디어는 소스 C 파일을 읽고 모든 중요한 문자 (ws 무시)의 수를 찾고 '* /'& '/ *'을 무시하는 것입니다. 저는이 프로그램을 정말 기본적인 수준으로 작성하려고 노력하고 있습니다. 왜냐하면 그것은 내 친구를위한 과정이기 때문입니다. 일반적으로 저는 PHP 프로그래머입니다.

이것은 내가 작성한 전체 코드입니다.

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

int in_array(char *array, char searchedEl); 
int main(){ 
    FILE *fp; 
    char readChar; 
    char exeptChars[] = {'\n', '\t','\0'}; 
    int charsCounter = 0; 
    char *openComment = "/*"; 
char *closeComment = "*/"; 
char tempHolder[2]; 
int j=0; 
    fp=fopen("testrw.txt","r"); 
    if(!fp){ 
    printf("Could not open file\n"); 
    return 1; 
    } 
    while((readChar = fgetc(fp)) != EOF){ 
    if((readChar == '*') || (readChar == '/') || (readChar == '\\')){ 
     if(j < 1){ 
    tempHolder[j] = readChar; 
    j++; 
    continue; 
     } 
     else{ 
    tempHolder[j] = readChar; 
    if(strcmp(tempHolder, openComment) || strcmp(tempHolder, closeComment)){ 
     charsCounter += 2; 
    } 
    tempHolder[2]='\0'; 
    j=0; 
    continue; 
     } 
    } 

    if(!in_array(exeptChars, readChar)){ 
     printf("Permited char: %c\n", readChar); 
     charsCounter++; 
    } 
    } 
    printf("Characters %d\n", charsCounter+1); 
    return 0; 
} 
int in_array(char *array, char searchedEl){ 
    char tempEl; 
    int i=0; 
    while(tempEl = array[i]){ 
    if(tempEl == searchedEl){ 
     return 1; 
    } 
    i++; 
    } 
    return 0; 
} 
+2

fgetc()를 호출하여 frst 문자를 얻은 다음 다시 호출하여 다음 문자를 가져옵니다. 아니면 너무 명백한가요? –

+0

전체 프로그램을 게시 할 수 있습니까? 또한 높은 수준의 논리를 말해. 여러 줄 주석/*과 */ – Madhu

+0

을 사용하여 뭔가를하려고하는 것처럼 보입니다. 프로그램의 주요 아이디어는 소스 C 파일을 읽고 모든 중요한 문자 (ws 무시)의 수를 찾고 '* /'를 무시하는 것입니다. & '/. 저는이 프로그램을 정말 기본적인 수준으로 작성하려고 노력하고 있습니다. 왜냐하면 그것은 내 친구를위한 과정이기 때문입니다. 일반적으로 저는 PHP 프로그래머입니다. – bozhidarc

답변

1

fread() 사용하면 단일 작업으로 여러 바이트를 가져올 수 있습니다.

0

밖으로 다른 사람을 {} 타고 경우() (그리고, 물론,로 변환 할 경우 (J == 1))

0

사용

size_t fread (void * ptr, size_t size, size_t count, FILE * stream); 

PTR - 블록의 포인터 (size * count) 바이트의 최소 크기를 갖는 메모리 크기 - 읽을 각 요소의 크기 (바이트)입니다. count - 요소의 수. 각 요소의 크기는 size 바이트입니다. stream - 입력 스트림을 지정하는 FILE 객체의 포인터. size_t - 성공적으로 읽은 총 요소 수입니다. 다음 문자가 잘못되면

1

사용 ungetc (readChar, FP는) :

char get_token(){ 
    readChar = fgetc(fp); 
    if(readChar==EOF) return END_OF_FILE; 
    if(readChar=='/'){ 
     nextChar=fgetc(fp); 
     if(nextChar==EOF) return readChar; 
     if(nextChar=='*') return OPEN_COMMENT; 
     ungetc(nextChar,fp); 
    } 
} 
+0

나는 그것을 트레이 :) – bozhidarc

0

당신이 다시 발명되어 바퀴를 보인다. char-by-char 텍스트를 파싱하는 것은 매우 낮은 수준의 일을하지 않는 이상해서는 안됩니다.

는 나는 당신이 C 코드에 주석을 찾고 있는지 이해 무엇에서 일부 텍스트 구문 분석 libs와 (GNU regex?)

를 사용하는 것이 좋습니다 생각합니다. C 코드를 파싱하려면 many ways이 char-char 파싱으로 파싱하는 것보다 낫습니다.

관련 문제