在C中:在单行文本文件中读取时分配变量

时间:2011-12-20 00:36:46

标签: c perl

我是一名初学者。我一直在学习C,Fortran和Perl。我的目标是创建一个包含曲面图的网页。我能够让我的程序进行通信以完成这项工作,但是在我的C程序中分配我的变量时遇到了问题。

从我的Perl程序中,我得到一个只包含一行的文本文件data.in

例如:cosxtsiny 50 0.5 3 0 6。这就是我所做的:

(将我的变量声明为charintdouble

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时,我的斧头不会开始和结束它们应该的位置。有什么建议吗?

3 个答案:

答案 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)。

希望这有帮助!