В C: присвоение переменных при чтении в однострочном текстовом файле - PullRequest
0 голосов
/ 20 декабря 2011

Я начинающий программист.Я спешил изучать 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, как только я сделаю некоторые вычисления с ним.Позже они получат график поверхности для меня.

Вот моя проблема: я получаю график поверхности с правильным количеством gridpionts (PTS), поэтому я знаю, что первые два назначения верны, но мои осивыкл.Когда я вижу data.out, мои оси не начинаются и не заканчиваются там, где они должны.Есть предложения?

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Полагаю, если вы объявляете func в виде массива символов, вам следует написать что-то вроде fscanf(fi, "%s", func) вместо fscanf(fi,"%s", &func).

0 голосов
/ 20 декабря 2011

Я попробовал следующее и работал нормально.

#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() (например,% 1.1f), основываясь на желаемом количестве десятичных знаков.печатать.

Надеюсь, это поможет!

0 голосов
/ 20 декабря 2011

определить массив символов char func[LEN]; или выделить память для вашего указателя символов func = (char *)malloc(NUMBER_OF_BYTES_YOU_WANT);

также вам нужно написать scanf("%s", func); не &func;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...