2012-09-04 183 views
1

我有兩個.c文件:一個包含main,另一個包含我所有的函數。一次讀取一個字符文件

在我主我有,我想在一個時間循環看起來像這樣來讀取一個字符的一部分:

while(ch = ReadFile(fp)) != EOF) 
{ 
    // Code 
} 

其中ch是一個整數(int ch;)和fp是一個文件指針(FILE* fp; )。

和(不同.c文件---):

int ReadFile(FILE* fp) 
{ 
    // Some code 
    return n; // The next char 
} 

有誰知道我可以從主一次讀一個字符這樣,使用這種方法嗎?

+4

'INT N =龜etc(FP);'? –

+2

如果你希望你的代碼是可移植的,我會避免使用名稱ReadFile,因爲Windows定義了[同名函數](http://msdn.microsoft.com/en-us/library/windows/ desktop/aa365467%28v = vs.85%29.aspx),並且C中不允許使用函數重載。 –

+1

如果不允許使用諸如getc()這樣的函數,則需要在問題中提及(最好在標題中)。就像它讀取一樣,你根本不知道如何進行文件訪問。我認爲這是功課? –

回答

6

更新: -

<stdio.h>著名getc是一個解決方案: -

while((ch = getc(fp)) != EOF) 
    { 
     //... 
    } 
... 
int ReadFile(FILE* fp) 
{ 
    //Do what you wish... :) 
    return getc(fp); 
} 

聲明爲int getc(FILE * _File);

+0

謝謝!我同意getc,但我需要使用我自己的外部ReadFile函數。所以while循環必須保持不變。 – user1647010

+0

@ user1647010: - 完成... :) – perilbrain

0

簡單:

while(ch != EOF) 
{ 
    ch = fgetc(fp); 
    //process ch 
} 

記住fgetc是decla紅色作爲int

或者,如果你想通過燒焦你可以通過字符讀取文件字符建立一個串字符來動態分配的內存,像這樣(假設fp爲您開放,閱讀):

char *data = NULL, *tmp; 
int ch, bff = 0; 

while(ch != EOF) 
{ 
    if(!(tmp = realloc(data, bff + 2))) 
    { 
     free(data); 
     return 1; 
    } 
    data = tmp; 
    ch = fgetc(fp); //or your readfile function assuming it works the same as fgetc 
    data[bff++] = ch; 
} 
data[bff] = '\0'; 

只是free(data)當你用它做

+0

每次迭代調用realloc聽起來都很昂貴。 – Awn

0

試試這個:

int ReadFile(FILE* fp, int *buffer) 
{ 
    if(fp != NULL) 
    { 
     *buffer = fgetc(fp); 
     return *buffer; 
    } 
    else return NULL; 
} 
相關問題