将数字打印到C文件中?

将数字打印到C文件中?,c,C,我是C语言的初学者,但在编程方面还不算太差。我正在用C语言编写一个程序,根据几个依赖于时间的方程计算物体的路径(x、y和z坐标)。然后我想把这些坐标打印到一个输出文件中,这样我就可以绘制它们了。现在,我有: double *t; double *x; double *y; double *z; 我做计算,填上x,y和z。然后我尝试将它们打印到一个文件: FILE *outputFile = fopen("path.out", "w"); for (i = 0; i<(sizeof(x)

我是C语言的初学者,但在编程方面还不算太差。我正在用C语言编写一个程序,根据几个依赖于时间的方程计算物体的路径(x、y和z坐标)。然后我想把这些坐标打印到一个输出文件中,这样我就可以绘制它们了。现在,我有:

double *t;
double *x;
double *y;
double *z;
我做计算,填上x,y和z。然后我尝试将它们打印到一个文件:

FILE *outputFile = fopen("path.out", "w");

for (i = 0; i<(sizeof(x)/sizeof(double)); ++i)
    char *strX = (char *) *(x+i);
    char *strY = (char *) *(y+i);
    char *strZ = (char *) *(z+i);
    fprintf(*outputFile, *strX);
    fprintf(*outputFile, "\t");
    fprintf(*outputFile, *strY);
    fprintf(*outputFile, "\t");
    fprintf(*outputFile, *strZ);
FILE*outputFile=fopen(“path.out”,“w”);
对于(i=0;i您使用的是需要格式规范的“fprintf”

无需进行指针转换等操作,因为这都是由fprintf函数根据提供的格式进行处理的,所以打印出三个由制表符分隔的双字符,您只需要:

fprintf(outputFIle,"%lf\t%lf\t%lf",x + i, y + i, z + i);
有关可在格式字符串中输入内容的更多详细信息,请参见:

您正在使用需要格式规范的“fprintf”

无需进行指针转换等操作,因为这都是由fprintf函数根据提供的格式进行处理的,所以打印出三个由制表符分隔的双字符,您只需要:

fprintf(outputFIle,"%lf\t%lf\t%lf",x + i, y + i, z + i);
有关可在格式字符串中输入内容的更多详细信息,请参见:

我注意到t、x、y、z是double*类型。它们需要指针的原因是什么?可能不是。除非你有很好的理由,否则你不应该在这段代码中使用指针。(FILE*可以,因为这是fopen的返回类型。)


此外,您不能将double强制转换为char*并期望将其作为字符串写入文件。fprintf()允许您为其提供一个格式化字符串以供输出。例如:fprintf(outputFile,“%f”,x);将打印一个double到输出。还请注意,fprintf的第一个参数是FILE*类型,因此您不需要取消对它的引用。

我注意到t、x、y、z是double*类型。这些参数需要成为指针有什么原因吗?可能没有。除非您有很好的理由,否则不应该在这段代码中使用指针。(FILE*可以,因为这是fopen的返回类型。)

double *t;
double *x;
double *y; 
double *z;
此外,您不能将double强制转换为char*并期望它以字符串的形式写入文件。fprintf()允许您为它指定一个要输出的格式化字符串。例如:fprintf(outputFile,“%f”,x);将在输出中打印一个double。另外,请注意,fprintf的第一个参数的类型为file*,因此不需要取消引用它

double *t;
double *x;
double *y; 
double *z;
正如Erik所说,没有必要使用这些指针,除非您想让它们指向其他变量,或者想要malloc或calloc它们。您可以简单地执行以下操作:

double t;
double x;
double y; 
double z;
但这也有点奇怪:

for (i = 0; i<(sizeof(x)/sizeof(double)); ++i)
但是x不是数组,在代码中它是一个指针,可能比double小,因此除法的结果是0,循环很有可能根本不会运行。假设你的意思是要循环整个缩进代码,你也忘记了{和}来包围块,所以循环只会执行第一行“块”

然后尝试一个double转换成一个字符串(因此会出现警告),但这不是它的工作方式,因为它只会尝试将double中的值重新解释为指向字符的指针,这肯定不是您想要的,而且是不必要的,因为
fprintf
将为您解决这个问题:

fprintf(outputFile, "%f\t%f\t%f\n", x, y, z);
循环和你使用指针的事实让我觉得你在试图循环一些东西,但并不完全清楚你真正想要实现什么。你能解释一下你真正想要做什么吗

正如Erik所说,没有必要使用这些指针,除非您想让它们指向其他变量,或者想要malloc或calloc它们。您可以简单地执行以下操作:

double t;
double x;
double y; 
double z;
但这也有点奇怪:

for (i = 0; i<(sizeof(x)/sizeof(double)); ++i)
但是x不是数组,在你的代码中它是一个指针,可能比double小,所以除法的结果是0,循环很有可能根本不会运行。假设你的意思是要循环整个缩进的代码,你也忘记了{和}来包围块,所以循环只会执行第一行。”块”

然后尝试一个double转换成一个字符串(因此会出现警告),但这不是它的工作方式,因为它只会尝试将double中的值重新解释为指向字符的指针,这肯定不是您想要的,而且是不必要的,因为
fprintf
将为您解决这个问题:

fprintf(outputFile, "%f\t%f\t%f\n", x, y, z);

循环和您正在使用指针的事实让我觉得您正在尝试循环某些内容,但您实际想要实现的目标并不完全清楚。您能解释一下您实际想要做什么吗?

您在“fprintf(*outputFile,“\t”)fprintf(*outputFile,*strY)之间缺少一个分号“,您可能应该编辑以对齐打印语句,使其更易于阅读。感谢您的回复,但这仍然无法解决您需要将循环体括在大括号中的问题。缩进没有任何意义,这里只有第一行(带有
strX
)实际上在循环中。您缺少“fprintf(*outputFile,“\t”)fprintf(*outputFile,*strY)”之间的分号,您可能应该编辑以对齐打印语句,使其更易于阅读。感谢您的回复,但这仍然无法解决您需要将循环体括在大括号中的问题。缩进没有任何意义,这里只有第一行(带有
strX
)实际上在循环中。我想你不是指*outputFile。加上x+I返回指向a-double的指针,这也是不正确的。一个小的更正-
outputFile
应该没有指针取消引用(
*
).
fprintf
已经接收到一个
文件*
第一个参数…我想你不是指*outputFile。加上x+I返回一个指向a-double的指针,这也是不正确的。一个小的更正-
outputFile
应该没有指针解引用(
*
).
fprintf
已经收到一个
文件*
第一个参数…感谢所有的帮助-我通过了