在eof之后从C文件输入到C中的数组

时间:2013-02-03 16:54:01

标签: c

我正在尝试将文件中的所有信息放入一个数组中,之后我已经遍历文件以查看该文件的行数。如果我putc文件的一行似乎工作,但是,如果我将数组位置设置为文件行,当我返回文件然后打印数组时,数字与它们应该是不同的。

这是我的代码。

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;
}

2 个答案:

答案 0 :(得分:0)

考虑这部分代码:

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

i在此循环期间不会更改,因此pA[i]会一直被每个新字符覆盖。你最终会得到pA[i],其中包含该行的最后一个字符。

答案 1 :(得分:0)

虽然按照Vaughn Cato的建议切换到fscanf()语句而不是getc(),但这对于让我走向正确的解决方案绝对有帮助。真正的不同之处在于删除了while语句,该语句检查以确保我已经到达行的末尾,然后再转到下一个整数。

现在的代码是,

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

到目前为止,似乎适用于所有适当的数据输入文件。