чтение строки за строкой и сохранение в массиве структуры

Я пытаюсь читать строки из текстового файла по строкам и хранить его в массиве. в файле txt есть вопрос, который будет задан игроку!

Вот некоторые из вопросов !!

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 

Его в Швеции!

Я создал функцию, которая разбивает линию везде, где она находит точку с запятой! как это:

 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); } 

И вот главный код:

 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; } 

Я хочу, чтобы он выдавал следующий результат:

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

Когда пользователь его выбирает, он переходит к следующему вопросу! это викторина, я немного новичок в этом языке!

Вот моя структура:

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

Чтобы сохранить вопрос вместе с правильным ответом, вам понадобится структура, подобная этой

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

Затем в цикле while вы можете прочитать вопрос и сохранить его в структуре

 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++; } 

После этого вы можете использовать массив структуры all_ques[] чтобы задать вопросы пользователям.

 #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++; } } 

извините, если я сделал некоторые фиктивные ошибки! действительно новый и пытаясь научиться @Haris