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

在eof之后从文件输入到C中的数组,c,C,我试图将一个文件中的所有信息放入一个数组中,在我已经遍历该文件以查看该文件有多少行之后。如果我在文件中放置一行,它似乎可以工作,但是,如果我在返回文件时将数组位置设置为文件行,然后打印数组,则得出的数字与应该的数字不同 这是我的密码 int main() { //Opens File char fName[20]; // fName = getchar(); scanf( "%s", fName);

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

这是我的密码

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;
}
intmain()
{
//打开文件
char-fName[20];
//fName=getchar();
scanf(“%s”,fName);
文件*fpIn;
fpIn=fopen(fName,“rt”);
//fpIn=fopen(“test1.txt”、“rt”);
如果(fpIn==NULL)
{
printf(“无法打开:”);
出口(99);
}
//获取线路
int行=0;
char ch;
而((ch=fgetc(fpIn))!=EOF)
{
如果(ch='\n'){lines++;}
}
clearerr(fName*fpIn);
fclose(fpIn);
fopen(fName,“rt”);
//制作数组
int*pA;
pA=(int*)malloc(lines*sizeof(int));
//填充数组

对于(int i=0;i考虑代码的这一部分:

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

i
在这个循环过程中不会改变,因此
pA[i]
会被每个新字符覆盖。您将得到
pA[i]
包含行中最后一个字符。

同时切换到fscanf()语句而不是getc()正如沃恩·卡托(Vaughn Cato)所建议的那样,这无疑有助于我找到正确的解决方案。真正不同的是删除了while语句,该语句进行了检查,以确保我在进入下一个整数之前已经到达了行的末尾

代码现在是这样的:

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

for(inti=0;iSo)那么我需要一个二维数组吗?我想我不知道为什么这样做有意义,因为它们都是数字。我把它修改成这样;while((ch=fgetc(fpIn))!='\n'{pA[i]=putchar(ch);}ch=fgetc(fpIn);现在它将正确的值写入屏幕,数组中仍然填充着与行的最后两个位置不匹配的字符。@aprohl5:您可能会混淆数字和字符。您的输入文件是什么样子的?最初它是一个浮点数列表。但我认为ught同样的事情,所以我把文件变成了数字1-9的列表,我遇到了同样的问题。@aprohl5:即使是单个数字,也有区别。字符“1”在ascii中的值是49,所以当你试图将其作为一个字符来读时,你会得到这个值。如果你想读一个数字,你需要像scanf这样的东西。好的,我把它切换到scanf,它现在读为(inti=0;I