2016-03-08 45 views
-1

如何使用fread函數從示例txt文件中讀取5到10個字符。 我有以下代碼:使用fread函數從文件中讀取前5個字符C

#include <stdio.h>   

main() 
{  

    char ch,fname[20]; 

    FILE *fp; 
    printf("enter the name of the file:\t"); 
    gets(fname); 
    fp=fopen(fname,"r"); 

    while(fread(&ch,1,1,fp)!=0) 
     fwrite(&ch,1,1,stdout); 

    fclose(fp); 
} 
當我輸入任何樣品filename..it打印文件的所有數據

我的問題是如何只打印來自示例文件的前5到10個字符。

+0

'一些5到10個字符'...你是什麼意思? –

+0

'gets(fname);'..nopes,根本不是。 –

+4

你的代碼讀取整個文件,因爲你告訴它。如果你想讀取前10個字符,請閱讀第一個十個字符,但不是整個文件。 –

回答

3

您的while循環運行,直到read到達文件末尾(第一次讀取0個字節)。

您將需要通過使用for循環或計數器來更改條件。

即(這些建議,而不是完整的工作代碼):

int counter = 10; 

while(fread(&ch,1,1,fp)!=0 && --counter) 
    fwrite(&ch,1,1,stdout); 

int i; 
for(i=0; i < 10 && fread(&ch,1,1,fp) > 0 ; i++) 
    fwrite(&ch,1,1,stdout); 

祝你好運!

P.S.

要在註釋中回答您的問題,fread允許我們以「原子單位」讀取數據,以便如果整個單元不可用,則不會讀取任何數據。

單個字節是最小單位(1),並且您正在讀取一個單位(單個字節),這是fread(&ch,1,1,fp)中的1,1部分。使用int i; fread(&i,sizeof(int),1,fp);

更多here -

你可以使用fread(&ch,1,10,fp)讀取10個單位或閱讀所有不求回報的單個二進制int字節(它只是一個演示這不會是便攜式)。

+0

一個更多的幫助..你能解釋我fread的語法。我不明白爲什麼我們使用fread(&ch,1,1,fp);也就是說,在我的書中每一處所傳遞的論點中,1,1是什麼意思,但我無法理解。 –

+0

@RahulKumar,我編輯了我的答案,以反映您評論中的問題。我希望這使事情更清楚。 – Myst

+0

感謝您的解釋。 –

1

這是您的代碼的修改版本。檢查修改後的註釋

#include <stdio.h>   

#define N_CHARS 10 // define the desired buffer size once for code maintenability 

int main() // main function should return int 
{  
    char ch[N_CHARS + 1], fname[20]; // create a buffer with enough size for N_CHARS chars and the null terminating char 

    FILE *fp; 
    printf("enter the name of the file:\t"); 
    scanf("%20s", fname); // get a string with max 20 chars from stdin   

    fp=fopen(fname,"r"); 

    if (fread(ch,1,N_CHARS,fp)==N_CHARS) { // check that the desired number of chars was read 
     ch[N_CHARS] = '\0'; // null terminate before printing  
     puts(ch);   // print a string to stdout and a line feed after 
    } 

    fclose(fp); 
} 
相關問題