从文件中填充结构数组

时间:2019-03-27 20:31:06

标签: c

显然,这是一个非常简单的任务,但是到目前为止,我一直在为此苦苦挣扎。

我正在初始化一系列结构。每个结构都是由两个数组组成。

然后,我试图从文件中读取并填充我的结构数组。 该文件由字符串组成,类似于:

sign1 path1
sign2 path2
sign3 path3

在填充然后打印阵列时遇到问题。 非常感谢您的帮助。 谢谢!

typedef struct { 
    char firma[333];
    char path[100];
}riga;

void riempi_riga(riga* r, FILE* f1) {
    //fscanf(f1, "%s %s\n", r->firma, r->path);
    fgets(r->firma, 33, f1);
    fgets(r->path, 100, f1);
    return;
}

void stampa_riga(riga* r) {
    printf("%s %s\n", r->firma, r->path);
    return;
}

int num_lines(FILE *f1) {
    char c;
    int lines = 0;
    while ((c = fgetc(f1)) != EOF)
        if (c == '\n')
            lines++;

    if (c != '\n')
        lines++;
    rewind(f1);
    return lines;
}

int main() {
    riga* file_firme[1000];
    int i = 0;
    int j = 0;
    FILE* f1;

    f1 = fopen("C:\\Users\\blabla\\Desktop\\firmaMD5.txt", "r");
    if (f1 == NULL) {
        printf("non sono riuscito ad aprire il file!\n");
        return 0;
    }

    int num_righe = num_lines(f1);
    for (i; i < num_righe; i++)
        riempi_riga(&file_firme[i], f1);

    //riempi_riga(r1, f1);
    //stampa_riga(r1);
    //fflush(f1);

    for (j; j < num_righe; j++) {
            stampa_riga(&file_firme[j]);
    }

    if (fclose(f1) != 0)
        printf("non sono riuscito a chiudere il file\n");

    return 0;
}

1 个答案:

答案 0 :(得分:0)

您的输入似乎在sign path行中,其中“符号”和“路径”之间用空格隔开。您可以使用fgets阅读整行,然后调用strtok获取这两个标记。此代码未经测试。

void riempi_riga(riga* r, FILE* f1) 
{
    char *tok;
    char buf[sizeof(r->firma)+sizeof(r->path)];
    if (fgets(buf, sizeof(buf), f1) != NULL)
    {
        if ((tok = strtok(buf)) != NULL)
        {
            strncpy(r->firma, tok, sizeof(r->firma));
            r->firma[sizeof(r->firma)-1]=0;
            if ((tok = strtok(NULL)) != NULL)
            {
                strncpy(r->path, tok, sizeof(r->path));
                r->path[sizeof(r->path)-1]=0;
            }
        }
    }
}