C语言中的文件输入和数组指针
我试图扫描一个文本文件中的数据列表,数据应该放在一个double类型的数组中,这必须在main之外的函数中完成。因此,指针需要指向main中的数组,从函数实际扫描数据到数组中 当我试图让函数通过如下指针返回数组时,就会出现问题(假设原型已经存在):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;
#包括
#包括
#定义大小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 feelCONST
之前应为“;”、“、”或“”,使用#define
定义。这就解释了问题所在。将readData
中的CONST
替换为size
@R Sahu它是这样的,而且它必须用于我正在做的项目。我在上面的代码中更改了它,在我的实际代码中它已经是大小了。我认为指针问题已经解决了,但是现在我在从“readData”中获取数组中元素的计数器时遇到了问题。重复I的原因是因为我正在试图找到一种方法来计算数组中的元素,然后以某种方式将其从函数readData传递回main,代码比所显示的有所增长。谢谢你解释指针的事情。然而,数组被设置成这样似乎很奇怪,但是哦,好吧。我想这与此有关,但我只是指出了它。
void readData(data[], int CONST)
void readData(double data[], int CONST)