2009-12-28 74 views
1

我正在讀C中的文件,char by char,但我需要得到2個連續的字符。請,有人可以給我一些建議嗎?如何從流中獲取兩個連續的字符?

該程序的主要思想是讀取源文件並找到所有重要字符的數量(忽略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()獲取第一個字符,然後再次調用它以獲取下一個字符。或者這太明顯了? – 2009-12-28 12:26:19

+0

你可以請你發佈你的整個程序?同時告訴我高級邏輯。似乎你正在嘗試使用多行註釋/ *和*/ – Madhu 2009-12-28 12:29:04

+0

做一些事情,程序的主要思想是讀取源文件C並找到所有重要字符的數量(忽略ws)並忽略'* /' &'/ *'。我試圖在真正的基礎層面編寫程序,因爲它適合我的朋友學習。一般來說,我是PHP程序員。 – bozhidarc 2009-12-28 13:12:08

回答

1

fread()將允許您在單個操作中獲取多個字節。

0

採取其他{}出來的,如果()(,當然,將其轉換爲如果(j == 1))

0

使用

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

PTR - 指向塊內存的最小尺寸爲(size * count)字節。 size - 要讀取的每個元素的大小(以字節爲單位)。 count - 元素的數量,每個元素的大小爲字節。 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 2009-12-28 13:15:29

0

看來要重新發明輪子。按字符解析文本是你不應該做的,除非你正在做一些非常低級的事情。

我覺得這是更好地使用一些文本分析庫(GNU regex?)

從我的理解是,你正在尋找的C代碼註釋。如果你想分析C代碼,那麼many ways要比用char-char解析解析它更好。

相關問題