在C中打印数字到文件?

时间:2011-08-30 05:51:02

标签: 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)/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);

我在尝试将每个double转换为char *时遇到了一大堆错误,但我不确定原因。是否有更好的方法来打印双打或将它们转换为char *进行打印?

3 个答案:

答案 0 :(得分:2)

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

不需要指针转换等,因为这全部由fprintf函数根据提供的格式处理,因此打印出由您只需要的标签分隔的三个双打:

fprintf(outputFIle,"%lf\t%lf\t%lf",x + i, y + i, z + i);

有关您可以在格式字符串中添加的内容的更多详细信息: tutorial

答案 1 :(得分:1)

我注意到t,x,y,z是double *类型。有没有理由为什么这些需要成为指针?可能不是。除非你有充分的理由,否则你不应该在这段代码中使用指针。 (文件*没关系,因为这是fopen的返回类型。)

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

答案 2 :(得分:0)

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)

你在哪里看到的?它有时用于获取数组中的项目数:

len = sizeof(myArray)/sizeof(myArray[0]);

但是x不是一个数组,在你的代码中它是一个指针,可能小于一个double,所以除法的结果是0,很可能循环根本不会运行。假设你的意思是整个缩进的代码要循环,你也忘记了{和}来围绕这个块,所以循环只会执行那个“块”的第一行。

然后你尝试强制转换一个字符串(因此警告),但这不是它的工作方式,因为它只会尝试重新解释值在double中作为指向char的指针,这肯定不是你想要的,而且没有必要,因为fprintf将为你处理:

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

循环和你使用指针的事实让我觉得你试图循环一些东西,但是你真正想要实现的并不完全清楚。你能解释一下你真正想做什么吗?