C语言中的一个程序,它读取二进制文件并以浮点表示法只输出零,而不输出文件内容
我对C语言或真正编写代码不是很熟悉。我试图读取二进制文件并将其输出到屏幕上。我正在使用fread和fopen,因为它们可以很好地处理二进制文件。我有这段代码可以编译,但当我以./a.out data1的形式运行代码时,我只得到0.0000。文件内容为4、1.1、2.2、3.3、4.4。这就是应该输出的内容。1.1000 2.2000 3.3000 4.40000仅浮动。我认为问题在于我没有正确地将文件中的值传递给数组。如有任何帮助或意见,我将不胜感激。我的代码如下C语言中的一个程序,它读取二进制文件并以浮点表示法只输出零,而不输出文件内容,c,C,我对C语言或真正编写代码不是很熟悉。我试图读取二进制文件并将其输出到屏幕上。我正在使用fread和fopen,因为它们可以很好地处理二进制文件。我有这段代码可以编译,但当我以./a.out data1的形式运行代码时,我只得到0.0000。文件内容为4、1.1、2.2、3.3、4.4。这就是应该输出的内容。1.1000 2.2000 3.3000 4.40000仅浮动。我认为问题在于我没有正确地将文件中的值传递给数组。如有任何帮助或意见,我将不胜感激。我的代码如下 #include <st
#include <stdio.h>
#include <malloc.h>
int main (int argc, char *argv[])
{
FILE *ifile;
int cnt, i;
float *fptr;
fptr = malloc (cnt * sizeof (float));
ifile = fopen (argv[1], "rb");
fread (fptr, sizeof (float), cnt, ifile);
printf ("%f\n", *fptr);
}
// new code that works
#include <stdio.h>
#include <malloc.h>
int main (int argc, char *argv[])
{
FILE *ifile;
int cnt, i;
float *fptr;
ifile = fopen (argv[1], "rb");
if (fread (&cnt, sizeof (int), 1, ifile) != 1) {
printf ("%d\n", cnt);
}
fptr = malloc (cnt * sizeof (float));
fread (fptr, sizeof (float), cnt, ifile);
for (i = 0; i < cnt; i++) {
printf ("%f\n", *fptr[i]);
}
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*ifile;
int-cnt,i;
浮动*fptr;
fptr=malloc(cnt*sizeof(float));
ifile=fopen(argv[1],“rb”);
fread(fptr、sizeof(浮动)、cnt、ifile);
printf(“%f\n”,*fptr);
}
//有效的新代码
#包括
#包括
int main(int argc,char*argv[])
{
文件*ifile;
int-cnt,i;
浮动*fptr;
ifile=fopen(argv[1],“rb”);
if(fread(&cnt,sizeof(int),1,ifile)!=1){
printf(“%d\n”,cnt);
}
fptr=malloc(cnt*sizeof(float));
fread(fptr、sizeof(浮动)、cnt、ifile);
对于(i=0;i
您没有在任何地方设置cnt
,因此您读取的浮点数可能不正确,也可能不正确。如果我将其硬编码为4
,并使用一个包含4个浮点数的二进制数据文件,则它可以正常工作:
#include <stdio.h>
#include <malloc.h>
int main (int argc, char *argv[]){
FILE *ifile;
int cnt = 4, i;
float *fptr;
fptr= malloc(cnt*sizeof(float));
ifile=fopen(argv[1], "rb");
fread(fptr, sizeof(float), cnt, ifile);
printf("%f\n", *fptr);
printf("%f\n", fptr[1]);
printf("%f\n", fptr[2]);
printf("%f\n", fptr[3]);
}
a<代码>fptr=malloc(cnt*sizeof(float))代码>和
fread(fptr、sizeof(float)、cnt、ifile)代码>。。。cnt
的值是?B不检查文件是否成功打开。我正在尝试使用malloc函数使用文件的第一个数字动态创建一个浮点数组。我不确定是否正确。cnt
从未分配到任何位置,而是在malloc()和fread()中使用,因此运行您问题中的程序会导致未定义的行为。您如何知道文件的内容?你打印出来了吗?你读的是二进制文件,它是真的二进制文件还是ascii文件?这是一个赋值,给我们的值,但我看不到文件。我现在为“cnt”添加另一个fread语句,看看这是否解决了问题。
$ ./test-prog data
1.100000
2.200000
3.300000
4.400000
$ hd data
00000000 cd cc 8c 3f cd cc 0c 40 33 33 53 40 cd cc 8c 40 |...?...@33S@...@|
00000010