C语言中的文件输入和数组指针

C语言中的文件输入和数组指针,c,arrays,file,pointers,input,C,Arrays,File,Pointers,Input,我试图扫描一个文本文件中的数据列表,数据应该放在一个double类型的数组中,这必须在main之外的函数中完成。因此,指针需要指向main中的数组,从函数实际扫描数据到数组中 当我试图让函数通过如下指针返回数组时,就会出现问题(假设原型已经存在): #包括 #包括 #定义大小12 int 主(空) { 双数据[大小]; int i; 读取数据(数据、大小); } 无效的 readData(双数据[],整数大小) { 文件*fp; fp=fopen(“data.txt”,“r”); int i;

我试图扫描一个文本文件中的数据列表,数据应该放在一个double类型的数组中,这必须在main之外的函数中完成。因此,指针需要指向main中的数组,从函数实际扫描数据到数组中

当我试图让函数通过如下指针返回数组时,就会出现问题(假设原型已经存在):

#包括
#包括
#定义大小12
int
主(空)
{
双数据[大小];
int i;
读取数据(数据、大小);
}
无效的
readData(双数据[],整数大小)
{
文件*fp;
fp=fopen(“data.txt”,“r”);
int i;
对于(i=0;i
这只是给了我一个运行时错误和崩溃,根本没有编译错误。我猜这是因为fscanf试图写入
&*data[CONST]
,但我不知道如何让它写入指针,而不仅仅是一个局部变量


将文件输入到函数指针中有什么诀窍吗?

您需要对
readData
进行一些调整

void readData(double data[], int CONST);
main
中,调用

readData(data, CONST);
另外,换行

    fscanf(read, "%lf", &*data[i]);

更新

在更新的代码中,您有

void readData(data[], int CONST)
而不是

void readData(double data[], int CONST)

您声明了
inti
两次,一次在
main()
中,一次在函数中,但在
main()
中未使用

将数组传递给函数时,写入数组元素并不等于写入局部变量,因为传递数组时,传递的是指向数组第一个元素的指针。当您传递
数据时,它与传递
数据[0]
相同。写入
data[i]
与写入
*(data+i)
是一样的,因为
data
是数组第一个元素的地址,所以您正在写入数组本身,而不是数组的副本。类似地,
&data[i]
给出了原始数组的第i个元素的地址,而不是它的副本,因此您可以并且应该在函数中使用它

最后,在函数声明中仍然缺少数组的数据类型


在更新的代码中,您确实定义了大小12,但后来使用了大小。因为C区分大小写,所以大小和大小不一样

确保data.txt文件存在

同样对于demo data.txt,应该有12行数字


还可以使用文件指针fscanf(fp、%lf、&data[i])

readData(&data[CONST])正在调用读取数据,其指针指向数组最后一个元素之外的内存。您需要更加熟悉数组在C语言中的工作方式。崩溃的最可能原因(代码如我编写本文时所示!)是文件未能打开。如果(fp==NULL)返回,则执行
;或者类似的,在进入循环之前。此外,如果确实打开了,您应该在阅读后关闭
fp
;您应该检查
fscanf
是否失败(如果它没有返回
1
,那么它无法读取,因此您的程序将继续从
数据中读取垃圾[i]
,可能会导致崩溃)。此外,您还需要
#包含
,并且显示完整的程序(即包含您对
大小的定义)
).我有#include和defined,为了完整性,我将在上面添加它们,现在我只是在散列基本内容,我将返回添加文件失败的错误消息,并读取其中的一部分,但感谢您提供更快的方法!大概
fscanf(read
应该是
fscanf(fp
)。检查给出问题的代码是否确实是您发布的代码(最好是复制粘贴),因此在readData(double data[],int CONST);我不需要做double*data[]?指针是否作为函数参数隐式包含数组?此外,它现在告诉我需要一个;,或)在那一行中的数字常量之前。谢谢,这比以前更有意义!@user3857017,你能在你的帖子中添加当前版本的代码,你如何调用
readData
,在那里你看到了编译器错误,以及编译器错误消息的逐字副本吗?代码现在更新了,没有其他错误我以后操作数组中的数据所需的函数。其他函数是/**/注释掉的,因此它们不会影响当前代码。我得到的确切错误是:“错误:在数值常量“I have a feel
CONST
之前应为“;”、“、”或“”,使用
#define
定义。这就解释了问题所在。将
readData
中的
CONST
替换为
size
@R Sahu它是这样的,而且它必须用于我正在做的项目。我在上面的代码中更改了它,在我的实际代码中它已经是大小了。我认为指针问题已经解决了,但是现在我在从“readData”中获取数组中元素的计数器时遇到了问题。重复I的原因是因为我正在试图找到一种方法来计算数组中的元素,然后以某种方式将其从函数readData传递回main,代码比所显示的有所增长。谢谢你解释指针的事情。然而,数组被设置成这样似乎很奇怪,但是哦,好吧。我想这与此有关,但我只是指出了它。
void readData(data[], int CONST)
void readData(double data[], int CONST)