我正在尝试从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++;
}
}
答案 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