簡體   English   中英

在eof之后從文件輸入到C中的數組

[英]Inputting from a file to an array in C, after 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;
}

考慮代碼的這一部分:

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

在此循環中i沒有改變,因此pA[i]會不斷被每個新字符覆蓋。 您將得到包含行中最后一個字符的pA[i]

在切換到fscanf()語句而不是Vaughn Cato建議的getc()時,絕對可以幫助我找到正確的解決方案。 真正的不同之處在於,刪除了while語句,該語句檢查以確保在移至下一個整數之前已到達行尾。

現在,代碼顯示為

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

到目前為止,它似乎適用於所有適當的數據輸入文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM