2017-10-10 67 views
-2

出於某種原因,信息形成文件沒有被傳遞。生成的輸出是錯誤的,有人可以指定什麼是錯誤的?我想讀取文件並傳遞文件信息並通過數組函數將其打印在屏幕上?

File Name  File Size   Date 
    AAA.C   1234   08-12-94 
    XXX.TXT   5678   12-11-96 
    DDD.C   9876   01-12-97 
    BBB.TXT   4455   06-08-93 

這是數據文件,我試圖讀取文件並使用函數在屏幕上打印它。

#include<stdio.h> 
char filedata(char name[][7]); 

int main(void) 
{ 
    char name[4][7]; 
    int i; 

    filedata(name); 

    for(i=0;i<4;i++) 
    { 
     puts(name[i]); 
    } 

} 

char filedata(char name[4][7]) 
{ 
    FILE *infile; 
    infile=fopen("data","r"); 

    int rows = sizeof(name)/sizeof(name[0]); 
    int i; 

    for(i=0;i<rows;i++) 
    { 
     fgets(name[i],sizeof(name),infile); 
    } 

} 
+4

鍵盤上的CAPS鎖定錯誤。 –

+0

警告:sizeof數組函數參數將返回大小'char(*)[7]'而不是'char [4] [7]'[-Wsizeof-array-argument] int rows = sizeof(name)/ sizeof (名稱[0]); ^ –

+0

'char name [4] [7];' - >'char name [4] [8];'或更大的尺寸。你不能直接使用'fgets'來輸入文件名。這是因爲一行包含其他數據。 – BLUEPIXY

回答

0
#include<stdio.h> 

char filedata(char name[][100]); 

int main(void) 

{ 
    char name[5][100]; 
    int i; 

    filedata(name); 

    for(i=0;i<5;i++) 
    { 
     puts(name[i]); 
    } 

} 

    char filedata(char name[][100]) 
    { 
    int i; 
    FILE *infile; 
    infile=fopen("data","r"); 


    for(i=0;i<5;i++) 
    { 
     fgets(name[i],100,infile); 
    } 

} 
0

如何進行功能FILEDATA轉到主板函數的數據

當發送name你的功能,你送的一個指針稱爲局部變量name因爲name是陣列。在C中,傳遞給函數後沒有「[]」的數組被視爲指向第0個成員的指針。

您正在通過引用此功能filedata

此外,請不要忘記fclose(infile);,同時在filedata函數中循環訪問for循環時,檢查EOF也是一個好主意。

+0

但是爲什麼它不起作用,如果我要將它改爲filedata(&name),錯誤消息顯示「從不兼容指針類型」傳遞參數1'filedata' – AMD

+0

您的本地變量'name'被聲明爲'char name [4 ] [7]'表示你將它聲明爲一個數組,或者更重要的是指向一組內存的指針。 當你說'&name'時,你說的是「指向名字的指針的地址」,這不是你想要的。 你的函數需要一個指針,而你的'name'變量已經是一個指針了:) –

+0

在函數原型中,可以保持數組中括號的左邊爲空,但是在main函數中,錯誤消息指出「array大小丟失「,爲什麼會發生? – AMD

相關問題