gpt4 book ai didi

c - 用文本文件中的数据填充数组

转载 作者:行者123 更新时间:2023-11-30 20:20:31 24 4
gpt4 key购买 nike

我有一个包含双数据的 .txt 文件。每个都在一个新的行中。我即将从文件中读取两次 - 一次用于计算文件有多少个数字,第二次 - 用数据填充数组。所以我这样做了:

#include <stdio.h>

char name[30];
scanf ("%s", name);

FILE *file = fopen (name, "r");
if (!file)
{
printf ("Cannot read from file %s!\n", name);
return 1;
}

double results;
int size = 0;
while ( fscanf (plik, "%lf", &results) != EOF)
{
size++;
}
//and here I have how many numbers is in the file

double numbers[size];
for (int i=0; i<size; i++)
{
fscanf (plik, "%lf\n", &numbers[i]);

}
for(int i = 0; i < size; i++)
{
printf("%lf\n" , numbers[i]);
}

但它不起作用 - 结果只有 0.000000,总计 6510(这么多)。谁能帮忙解决这个问题吗?

最佳答案

正如 Chris 所指出的,当您在第一遍中读取文件时,fscanf 会移动文件指针。所以你在第二遍中没有读到任何内容。我假设所有代码都在 main 函数中,而 plik 只是从 file 复制的另一个标识符。使用 fseek(file, 0, SEEK_SET) 将文件指针重置为文件开头似乎可以解决我的问题:

#include <stdio.h>

int main() {
char name[30];
scanf ("%s", name);

FILE *file = fopen (name, "r");
if (!file)
{
printf ("Cannot read from file %s!\n", name);
return 1;
}

double results;
int size = 0;
FILE *pFilePtr = file;
printf("file = %p\n", file);
while ( fscanf (pFilePtr, "%lf", &results) != EOF)
size++;
printf("size : %d\n", size);

double numbers[size];
fseek(file, 0, SEEK_SET);
FILE *plik = file;
for (int i=0; i<size; i++)
fscanf (plik, "%lf", &numbers[i]);
for(int i = 0; i < size; i++)
printf("%lf\n" , numbers[i]);
return 0;
}

我运行它假设这个文件输入:

~/Documents/src : $ cat testFile.txt 
1.2334 2.223 3.34 4.21 5.34 6.23
~/Documents/src : $ g++ testFillArr.c
~/Documents/src : $ ./a.out
testFile.txt
file = 0x559494bdd420
size : 6
1.233400
2.223000
3.340000
4.210000
5.340000
6.230000

关于c - 用文本文件中的数据填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com