我是一名初学者。我一直在学习C,Fortran和Perl。我的目标是创建一个包含曲面图的网页。我能够让我的程序进行通信以完成这项工作,但是在我的C程序中分配我的变量时遇到了问题。
从我的Perl程序中,我得到一个只包含一行的文本文件data.in
。
例如:cosxtsiny 50 0.5 3 0 6
。这就是我所做的:
(将我的变量声明为char
,int
或double
)
FILE *fi
fi = open("data.in", "r");
fscanf(fi, "%s %d %f %f %f %f", &func, &PTS, &xxa, &xxb, &yyc, &yyd);
close(fi);
我应该使用我从data.out
得到的值生成一个文件data.in
。这些将在以后为我生成表面图。
这是我的问题:我得到一个具有正确数量的网格图(PTS)的曲面图,所以我知道前两个任务是正确的,但是我的轴是关闭的。当我看到data.out
时,我的斧头不会开始和结束它们应该的位置。有什么建议吗?
答案 0 :(得分:1)
我想如果你将func
声明为字符数组,那么你应该写fscanf(fi, "%s", func)
而不是fscanf(fi,"%s", &func)
。
答案 1 :(得分:0)
定义char数组char func[LEN];
或为char指针func = (char *)malloc(NUMBER_OF_BYTES_YOU_WANT);
您还需要写scanf("%s", func);
而不是&func
;
答案 2 :(得分:0)
我尝试了以下操作并且工作正常。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fpi, *fpo;
char data[100];
int pts;
float xxa, xxb, yyc, yyd;
fpi = fopen("data.in", "r");
if (fpi == NULL) {
perror("Failed to open file - data.in \n");
return 1;
}
fscanf(fpi, "%s %d %f %f %f %f", data, &pts, &xxa, &xxb, &yyc, &yyd);
fclose(fpi);
/* do you calculations here */
fpo = fopen("data.out", "w");
if (fpi == NULL) {
perror("Failed to open file - data.out \n");
return 1;
}
fprintf(fpo, "%s %d %1.1f %1.1f %1.1f %1.1f\n", data, pts, xxa, xxb, yyc, yyd);
fclose(fpo);
return 0;
}
我看到了以下输出:
>
> cat data.in
cosxtsiny 50 0.5 3 0 6
>
> gcc a.c
>
> ./a.out
>
> cat data.out
cosxtsiny 50 0.5 3.0 0.0 6.0
>
注意:您可以根据要打印的小数点数更改fprintf()
格式说明符(f.e.%1.1f)。
希望这有帮助!