Lectura línea por línea y almacenamiento en una matriz de estructura.

Estoy tratando de leer líneas de un archivo de texto línea por línea y almacenarlas en una matriz. ¡El archivo txt tiene alguna pregunta que se le preguntará al jugador!

¡Aquí están algunas de las preguntas!

1: När kom potatisen till Europa?;A:1300-talet; B:1500-talet; C:900-talet;D:1700-talet\n rätt svar : B 2: I vilken enhet mats elektrisk spänning ?;A:Ampere;B:Volt;C:Joule;D:Watt\n Rätt svar: A 3: Från vilket land har vi fått lego?;A:Tyskland;B:Australien;C:Japan;D:Danmark\n rätt svar : D 

¡Está en Suecia!

¡He hecho una función que divide la línea donde encuentra un punto y coma! Me gusta esto:

 void readline_andsplit() { char str[500]; char *ptr;// token FILE * fp = fopen("gameee.txt","r"); while(fgets(str, 500, fp)){ // read 500 characters // print what we read for fun ptr = strtok(str, ";"); // split our findings around the " " while(ptr != NULL) // while there's more to the string { printf("%s\n", ptr); // print what we got ptr = strtok(NULL, ";"); // and keep splitting } } fclose(fp); } 

Y aquí está el código principal:

 int main() { int i = 0; int numProgs = 0; char* nrofqeustions[50]; char line[80]; int j = 0; char correctanswer; FILE *file; file = fopen("gameee.txt", "r"); while(fgets(line, sizeof line, file)!=NULL) { nrofqeustions[i] = calloc(strlen(line)+1, 1); //add each filename into array of nrofqeustions strcpy(nrofqeustions[i], line); i++; //count number of nrofqeustions in file } //check to be sure going into array correctly //for (j=0 ; j<numProgs+1; j++) { //printf("\n%s", nrofqeustions[j]); //} printf("%s\n",nrofqeustions[0]); fclose(file); return 0; } 

Quiero que produzca la siguiente salida:

 1: När kom potatisen till Europa? A:1300-talet B:1500-talet C:900-talet D:1700-talet 

Cuando el usuario lo elige, pasa a la siguiente pregunta. ¡Es un cuestionario que soy algo nuevo en el idioma!

Aquí está mi estructura:

  struct quiz{ char question[x]; char alt [4]; char correctanswer[1]; }; 

Para almacenar la pregunta junto con la respuesta correcta, necesitarías una estructura como esta.

 struct quiz { char question[50]; char* alt[4]; char correctanswer[1]; }; 

Luego, en el bucle while puedes leer la pregunta y guardarla en la estructura.

 struct quiz all_ques[10]; int i = 0; //use i to terminate the loop, as how many questions are there in the file while(fgets(str, 500, fp) || i<4) // read 500 characters { ptr = strtok(str, ";"); // split our findings around the " " strcpy(all_ques[i].questions, ptr); // store the question ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[0] = malloc(10); strcpy(all_ques[i].alt[0], ptr); // store the first option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[1] = malloc(10); strcpy(all_ques[i].alt[1], ptr); // store the second option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[2] = malloc(10); strcpy(all_ques[i].alt[2], ptr); // store the third option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[3] = malloc(10); strcpy(all_ques[i].alt[3], ptr); // store the fourth option fgets(str, 500, fp) strcpy(all_ques[i].correctanswer, str); // store the correct answer i++; } 

Después de esto, puede usar la matriz de la estructura all_ques[] para dar las preguntas a los usuarios.

 #include #include struct quiz { char questions[50]; char* alt[4]; char correctanswer[1]; }; int main (){ struct quiz all_ques[10]; int i = 0; FILE *haidar; haidar=fopen("gameee.txt","r"); char str[500]; char *ptr; while(fgets(str, 500, haidar)) // read 500 characters { ptr = strtok(str, ";"); // split our findings around the " " strcpy(all_ques[i].questions, ptr); // store the question ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[0] = malloc(10); strcpy(all_ques[i].alt[0], ptr); // store the first option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[1] = malloc(10); strcpy(all_ques[i].alt[1], ptr); // store the second option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[2] = malloc(10); strcpy(all_ques[i].alt[2], ptr); // store the third option ptr = strtok(NULL, ";"); // and keep splitting all_ques[i].alt[3] = malloc(10); strcpy(all_ques[i].alt[3], ptr); // store the fourth option fgets(str, 500, haidar); strcpy(all_ques[i].correctanswer, str); // store the correct answer i++; } } 

lo siento si hice algunos errores ficticios !! Realmente nuevo y tratando de aprender @Haris.