我有一个像这样的文本文件:
Naruto, Wind, 85, 48, 35, 63
Neji, Fire, 57, 53, 81, 45
Gaara, Earth, 73, 47, 96, 50
Sasuke, Fire, 68, 82, 72, 41
Kankurou, Water, 59, 42, 97, 60
我有我的结构
typedef struct ninja{
char* name;
char* element;
int ninjutsu ;
int genjutsu ;
int taijutsu ;
int defesa ;
} Ninja ;
我需要读取文本文件并使用此结构将其直接加载到内存中。我应该创建一些数组,将信息逐个存储在内部,然后转换类型(当为 int 时)然后加载它吗?
void file(){
FILE *file = fopen("ninjas.txt", "r");
int c;
if (file) {
while ((c = getc(file)) != ','){
putchar(c);
}
while ((c = getc(file)) != ','){
putchar(c);
}
while ((c = getc(file)) != ','){
putchar(c);
}
while ((c = getc(file)) != ','){
putchar(c);
}
while ((c = getc(file)) != ','){
putchar(c);
}
while ((c = getc(file)) != '\n'){
putchar(c);
}
fclose(file);
}
}
最佳答案
您的问题可能出在从文件读取后解析输入。我编写了一个在我的系统中完美运行的解决方案(Ubantu 使用 gcc)。 我使用 fgets() 方法读取一行,然后使用 strtok() 函数解析它。
这是代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORD 100
#define MAX_LINE 200
typedef struct ninja{
char* name;
char* element;
int ninjutsu ;
int genjutsu ;
int taijutsu ;
int defesa ;
} Ninja ;
int main(int argc,char** argv){
FILE *fptr=fopen("input.txt","r");
if(fptr==NULL){
printf("Error in openning file\n");
return 1;
}
Ninja ninjas[MAX_RECORD];
int total_record=0;
char line_buffer[MAX_LINE];
while(total_record< MAX_RECORD && fgets(line_buffer,MAX_LINE,fptr)!=NULL)
{
char *curr_record=NULL;
curr_record=strtok(line_buffer,",");
ninjas[total_record].name=(char *)malloc(sizeof(char)*50);
strcpy(ninjas[total_record].name,curr_record);
curr_record=strtok(NULL,",");
ninjas[total_record].element=(char *)malloc(sizeof(char)*50);
strcpy(ninjas[total_record].element,curr_record);
curr_record=strtok(NULL,",");
ninjas[total_record].ninjutsu=atoi(curr_record);
curr_record=strtok(NULL,",");
ninjas[total_record].genjutsu=atoi(curr_record);
curr_record=strtok(NULL,",");
ninjas[total_record].taijutsu=atoi(curr_record);
curr_record=strtok(NULL,",");
ninjas[total_record].defesa=atoi(curr_record);
total_record++;
}
for(int i=0;i<total_record;i++)
{
printf("%s %s %d %d %d %d",ninjas[i].name,ninjas[i].element,ninjas[i].ninjutsu,ninjas[i].genjutsu,ninjas[i].taijutsu,ni$
printf("\n");
}
fclose(fptr);
return 0;
}
输出:
Naruto Wind 85 48 35 63
Neji Fire 57 53 81 45
Gaara Earth 73 47 96 50
Sasuke Fire 68 82 72 41
Kankurou Water 59 42 97 60
关于c - 如何使用结构从文本文件中读取并将其加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53368695/