2013-02-03 56 views
1

我試圖把文件中的所有信息放入一個數組,然後我已經循環遍歷該文件以查看該文件有多少行。如果我把文件的一行看起來似乎起作用,但是,如果我在文件返回時將數組位置設置爲文件行,然後打印該數組,則數字會與應該出現的方式不同。從文件輸入到C中的數組,在eof

這是我的代碼。

int main() 
{ 

          //Opens File 

    char fName[20]; 

    // fName = getchar(); 

    scanf("%s", fName); 

    FILE *fpIn; 

    fpIn = fopen (fName, "rt"); 
    // fpIn = fopen("test1.txt", "rt"); 

    if (fpIn == NULL) 
    { 
     printf("Unable to open: "); 
     exit(99); 
    } 

          //Gets Lines 

    int lines=0; 
    char ch; 

    while((ch=fgetc(fpIn))!=EOF) 
    { 
     if (ch=='\n') { lines++; } 

    } 

    clearerr(fName *fpIn); 
    fclose(fpIn); 
    fopen(fName, "rt"); 

          //Makes Array 

    int *pA; 

    pA = (int *)malloc(lines*sizeof(int)); 

          //Fills Array 

    for (int i=0; i<lines; i++) 
    { 
     while ((ch=fgetc(fpIn))!='\n') 
     { 
      pA[i] = ch; 
     } 
     ch=fgetc(fpIn); 
    } 

    for (int i=0; i<lines; i++) 
    { 
     printf("%d\n", pA[i]); 
    } 



    return 0; 
} 

回答

0

考慮這部分代碼:

while ((ch=fgetc(fpIn))!='\n') 
    { 
     pA[i] = ch; 
    } 

i這個循環過程中不會發生變化,因此pA[i]不斷與每個新字符覆蓋。您將以pA[i]結束,其中包含行上的最後一個字符。

+0

那麼我需要一個二維數組呢?我想我不確定爲什麼這是有道理的,因爲它們都是數字。 我已經修改它看起來像這樣; ((ch = fgetc(fpIn))!='\ n') pA [i] = putchar(ch); } ch = fgetc(fpIn); 現在它將正確的值寫入屏幕,並且該數組仍然填滿了平行數字,這些數字甚至不匹配最後幾行的內容。 – aprohl5

+0

@ aprohl5:你可能會在數字和字符之間感到困惑。你的輸入文件是什麼樣的? –

+0

最初它是一個浮點數的列表。但我認爲同樣的事情,所以我把文件轉換爲數字1-9的列表,並且我遇到了同樣的問題。 – aprohl5

0

按照Vaughn Cato的建議,切換到fscanf()語句而不是getc(),這對於讓我走向正確的解決方案非常有幫助。真正的區別是刪除while語句,以確保在到達下一個整數之前我已經到達行尾。

現在,該代碼讀取,

for (int i=0; i<lines; i++) 
    { 
     fscanf(fpIn, "%lf", &pA[i]); 
    } 

而且,到目前爲止,似乎所有適當的數據輸入文件。