Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <stdbool.h>
- int tipus2EN=0;
- typedef struct kerdesegyseg {
- int kerdesazon;
- char kerdes[300];
- char valasz;
- char cim[4][300]; //téma
- int valszama; //válaszok száma
- char v[6][300]; //válaszok, max 6db rendre a-tól max f-ig
- int betuszam; //sorrendmegadós esetén a betûk száma
- char magyarazat[300];
- char kep[100];
- struct kerdesegyseg *kov; //válaszok száma
- } kerdesegyseg;
- kerdesegyseg *elemolvas(FILE *fp) {
- kerdesegyseg *egyseg = (kerdesegyseg*) malloc(sizeof(kerdesegyseg));
- char a = 'z'; //egy nem '\t' kezdõérték az a-nak
- int i = 0;
- int j = 0;
- int end;
- end = fscanf(fp, "%d", &egyseg->kerdesazon);
- if (end == EOF)
- return NULL;
- fscanf(fp, "%c", &a);
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- i=0;
- while (a != '\t') {
- egyseg->kerdes[i] = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->kerdes[i] = '\0';
- if(egyseg->kerdesazon==495){
- printf("awesome kerdes\n");
- }
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- while (a != '\t') {
- egyseg->valasz = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
- fscanf(fp, "%c", &a); // !!! Nem szabad elfogadni 1-nél több karaktert (whitelist: a,b,c,d?, ...?)
- }
- if(egyseg->valasz=='x' && tipus2EN==1){
- while (a == '\t'){
- fscanf(fp, "%c", &a);} //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- fscanf(fp, "%d", &i);
- egyseg->betuszam=i;
- while(a=='\t'){fscanf(fp,"%c", &a);
- }
- i=0;
- while(a!='\n'){ //helyes sorrend beolvasása
- fscanf(fp,"%c", &a);
- egyseg->v[0][i]=a;
- i++;
- }
- j = 0; //címek
- while(j<4){ //beolva-
- i=0; //sása
- while (a != '\t') {
- egyseg->cim[j][i] = a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->cim[j][i] = '\0';
- fscanf(fp, "%c", &a);
- j++;
- }
- while(a=='\t'){
- fscanf(fp, "%c", &a);
- }
- i=0;
- while(a!='\t'){
- egyseg->magyarazat[i]=a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->magyarazat[i]='\0';
- egyseg->kov = NULL;
- return egyseg;
- }else{
- if(egyseg->kerdesazon==495){
- printf("awesome valasz\n");
- }
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- j = 0; //címek
- while(j<4){ //beolva-
- i=0; //sása
- while (a != '\t') {
- egyseg->cim[j][i] = a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->cim[j][i] = '\0';
- fscanf(fp, "%c", &a);
- j++;
- }
- egyseg->valszama = 0; //válaszok beolvasása
- while (a != '\n' && end != EOF) {
- j = 0;
- while (a != '\t' && a != '\n' && end != EOF) {
- egyseg->v[egyseg->valszama][j] = a;
- end = fscanf(fp, "%c", &a);
- j++;
- }
- if(j>0){egyseg->v[egyseg->valszama][j] = '\0';
- }
- if((a != '\t' || j>0) && a!='\n'){
- egyseg->valszama++;
- }
- if (a != '\n')
- end = fscanf(fp, "%c", &a);
- }
- i=j; //megjegyezzük hány karakterből áll az utolsó válasz
- for(j=0;j<i+1;j++){
- egyseg->magyarazat[j]=egyseg->v[egyseg->valszama][j];
- }
- }
- egyseg->kov = NULL;
- //printf("%d \n",egyseg->kerdesazon);
- return egyseg;
- }
- kerdesegyseg *adatbetolt(FILE * fp) {
- kerdesegyseg* eleje = NULL;
- kerdesegyseg* kerdes = NULL;
- kerdesegyseg* elozo = NULL;
- while (kerdes = elemolvas(fp)) {
- if (eleje != NULL) { // nem az elsõ kör
- elozo->kov = kerdes;
- } else { //elsõ kör
- eleje = kerdes;
- }
- elozo = kerdes;
- }
- if (kerdes != NULL)
- kerdes->kov = NULL;
- return eleje;
- }
- void printlistelems(kerdesegyseg *egyseg, int db) {
- for (int i = db; db>0; db--) {
- printf("%d\n", egyseg->kerdesazon);
- printf("%s\n", egyseg->kerdes);
- printf("kep: %s\n", egyseg->kep);
- printf("%c\n", egyseg->valasz);
- for(int j=0;j<4;j++){
- printf("%s\n", egyseg->cim[j]);
- }
- printf("%d\n", egyseg->valszama);
- for (i=0; i<(egyseg->valszama); ++i) {
- printf("%s\n", egyseg->v[i]);
- }
- printf("MAGYARAZAT: %s\n", egyseg->magyarazat);
- egyseg = egyseg->kov;
- }
- }
- void free_the_list(kerdesegyseg *eleje) {
- kerdesegyseg *next;
- if (eleje == NULL)
- return;
- while (eleje->kov != NULL) {
- next = eleje->kov;
- free(eleje);
- eleje = next;
- }
- }
- bool print_kerdes(kerdesegyseg *eleje, int hanyadik){
- char betu='a';
- char felhvalasz='q';
- for(int i=1;i<hanyadik;i++){
- eleje=eleje->kov;
- }
- printf("\n%d\n",hanyadik);
- for(int i=0;i<4;i++){
- if(eleje->cim[i][0]!='\0'){
- printf("%s\n",eleje->cim[i]);
- }
- }
- if(eleje->kep[0]!='\0'){
- printf("***A kerdeshez a %s kep tartozik***", eleje->kep);
- }
- printf("\n---- \n|%s\n---- \n",eleje->kerdes );
- if(eleje->valasz!='x'){
- for(int i=0;i<eleje->valszama;i++,betu++){
- printf("%c.) %s\n", betu, eleje->v[i]);
- }
- }
- fflush(stdin);
- if(felhvalasz=getchar()){
- printf("%c", &felhvalasz);
- if(felhvalasz==eleje->valasz){
- if(eleje->magyarazat[0]!='\0'){printf("helyes valasz\n MAGYARAZAT: %s\n", eleje->magyarazat);}else{
- printf("helyes valasz\n MAGYARAZAT:----\n");
- }
- return true;}
- else{ if(eleje->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARATAR: %s\n", eleje->magyarazat);}
- else{printf("helytelen valasz\n MAGYARATAR:----\n");}
- return false;
- }
- }
- }
- int induljonateszt(kerdesegyseg *eleje, int ran){
- int pontok=0;
- for(int i=0;i<10;i++){
- ran=rand()%400; //csak a teszthez 400
- bool valasz=print_kerdes(eleje, ran);
- }
- return pontok;
- }
- void kepekneve(kerdesegyseg *eleje,FILE *fkp){
- kerdesegyseg *uj=eleje;
- int azonell=0;
- char a='z';
- int i=0;
- fscanf(fkp, "%d",&azonell);
- while(azonell!=EOF){uj=eleje;
- printf("%d\n",azonell);
- while(uj->kerdesazon!=azonell){
- uj=uj->kov;
- }
- fscanf(fkp, "%c",&a); //beolvassuk a vesszőt
- i=0;
- while(a!='\n'){
- fscanf(fkp, "%c",&a);
- uj->kep[i]=a;
- i++;
- }
- uj->kep[i]='\0';
- printf("%s\n",uj->kep);
- fscanf(fkp, "%d",&azonell);
- }
- }
- int main(int argc, char *argv[]) {
- srand(time(NULL));
- int ran=(rand())%400; //csak a teszthez 400
- int pontok=0;
- FILE* fp;
- fp = fopen("kerdesek_ascii.txt", "r");
- kerdesegyseg *data = adatbetolt(fp);
- fclose(fp);
- FILE* fkp;
- fkp=fopen("kepek.txt","r");
- kepekneve(data,fkp);
- fclose(fkp);
- // printlistelems(data, 20);
- //induljonateszt(data,ran);
- free_the_list(data);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement