从txt文件中只读值

时间:2017-12-01 12:33:52

标签: c arrays parsing variables

我正在尝试从txt文件中读取变量。 文件.txt就像:

john 10
mark 230
peter 1

我想将这些值传输并保存在一个数组中,例如array [0] = 10,array [1] = 230等,而不需要注意名称。我在下面粘贴了我的代码,我想知道如何使用下面的代码编辑它

int conf[4], i = 0, c;
FILE *file_conf;
file_conf = fopen("conf.txt", "r");

if(file_conf == NULL){
   fprintf(stderr, "Error\n");
   exit(EXIT_FAILURE);
} else {
    while((c = fgetc(file_conf)) != EOF) { 
        fscanf(file_conf, "%d", &conf[i]);
        printf("%d\n", conf[i]);
        i++; 
    }
}   

2 个答案:

答案 0 :(得分:1)

您根本不应该使用fgetc() - 这会获得一个字符。相反,请将名称格式添加到fscanf(),如下所示:

char name[100];
fscanf(file_conf, "%s %d", name, &conf[i]);

答案 1 :(得分:1)

您可以使用scanf()*系列转换说明符添加前缀以禁止分配。请注意,在发布的代码中,无法检查从fscanf()返回的值可能会导致输入格式错误。此外,当数组索引i增长得太大以避免缓冲区溢出时,输入循环应该退出。当i太大或遇到格式错误的输入时,以下代码退出循环:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int conf[4], i = 0;
    FILE *file_conf;
    file_conf = fopen("conf.txt", "r");

    if(file_conf == NULL){
        fprintf(stderr, "Error\n");
        exit(EXIT_FAILURE);
    } else {
        while(i < 4 && fscanf(file_conf, "%*s%d", &conf[i]) == 1) {
            printf("%d\n", conf[i]);
            i++; 
        }
    }

    fclose(file_conf);

    return 0;
}

使用发布的样本输入输出:

10
230
1