Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.54 KB | None | 0 0
  1.  
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <stdbool.h>
  7.  
  8. int tipus2EN=0;
  9. typedef struct kerdesegyseg {
  10. int kerdesazon;
  11. char kerdes[300];
  12. char valasz;
  13. char cim[4][300]; //téma
  14.  
  15. int valszama; //válaszok száma
  16. char v[6][300]; //válaszok, max 6db rendre a-tól max f-ig
  17. int betuszam; //sorrendmegadós esetén a betûk száma
  18. char magyarazat[300];
  19. char kep[100];
  20. struct kerdesegyseg *kov; //válaszok száma
  21. } kerdesegyseg;
  22.  
  23.  
  24. kerdesegyseg *elemolvas(FILE *fp) {
  25. kerdesegyseg *egyseg = (kerdesegyseg*) malloc(sizeof(kerdesegyseg));
  26. char a = 'z'; //egy nem '\t' kezdõérték az a-nak
  27. int i = 0;
  28. int j = 0;
  29.  
  30. int end;
  31. end = fscanf(fp, "%d", &egyseg->kerdesazon);
  32. if (end == EOF)
  33. return NULL;
  34.  
  35.  
  36. fscanf(fp, "%c", &a);
  37. while (a == '\t')
  38. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  39.  
  40. i=0;
  41. while (a != '\t') {
  42. egyseg->kerdes[i] = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
  43. fscanf(fp, "%c", &a);
  44. i++;
  45. }
  46. egyseg->kerdes[i] = '\0';
  47. if(egyseg->kerdesazon==495){
  48. printf("awesome kerdes\n");
  49. }
  50. while (a == '\t')
  51. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  52.  
  53. while (a != '\t') {
  54. egyseg->valasz = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
  55. fscanf(fp, "%c", &a); // !!! Nem szabad elfogadni 1-nél több karaktert (whitelist: a,b,c,d?, ...?)
  56. }
  57. if(egyseg->valasz=='x' && tipus2EN==1){
  58. while (a == '\t'){
  59. fscanf(fp, "%c", &a);} //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  60.  
  61. fscanf(fp, "%d", &i);
  62. egyseg->betuszam=i;
  63. while(a=='\t'){fscanf(fp,"%c", &a);
  64. }
  65. i=0;
  66. while(a!='\n'){ //helyes sorrend beolvasása
  67. fscanf(fp,"%c", &a);
  68. egyseg->v[0][i]=a;
  69. i++;
  70. }
  71. j = 0; //címek
  72. while(j<4){ //beolva-
  73. i=0; //sása
  74. while (a != '\t') {
  75. egyseg->cim[j][i] = a;
  76. fscanf(fp, "%c", &a);
  77. i++;
  78. }
  79. egyseg->cim[j][i] = '\0';
  80. fscanf(fp, "%c", &a);
  81.  
  82. j++;
  83. }
  84. while(a=='\t'){
  85. fscanf(fp, "%c", &a);
  86. }
  87. i=0;
  88. while(a!='\t'){
  89. egyseg->magyarazat[i]=a;
  90. fscanf(fp, "%c", &a);
  91. i++;
  92. }
  93. egyseg->magyarazat[i]='\0';
  94. egyseg->kov = NULL;
  95. return egyseg;
  96.  
  97. }else{
  98. if(egyseg->kerdesazon==495){
  99. printf("awesome valasz\n");
  100. }
  101. while (a == '\t')
  102. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  103.  
  104. j = 0; //címek
  105. while(j<4){ //beolva-
  106. i=0; //sása
  107. while (a != '\t') {
  108. egyseg->cim[j][i] = a;
  109. fscanf(fp, "%c", &a);
  110. i++;
  111. }
  112. egyseg->cim[j][i] = '\0';
  113. fscanf(fp, "%c", &a);
  114.  
  115. j++;
  116. }
  117.  
  118.  
  119.  
  120.  
  121. egyseg->valszama = 0; //válaszok beolvasása
  122. while (a != '\n' && end != EOF) {
  123. j = 0;
  124. while (a != '\t' && a != '\n' && end != EOF) {
  125. egyseg->v[egyseg->valszama][j] = a;
  126. end = fscanf(fp, "%c", &a);
  127. j++;
  128. }
  129. if(j>0){egyseg->v[egyseg->valszama][j] = '\0';
  130. }
  131. if((a != '\t' || j>0) && a!='\n'){
  132. egyseg->valszama++;
  133. }
  134. if (a != '\n')
  135. end = fscanf(fp, "%c", &a);
  136.  
  137. }
  138. i=j; //megjegyezzük hány karakterből áll az utolsó válasz
  139. for(j=0;j<i+1;j++){
  140. egyseg->magyarazat[j]=egyseg->v[egyseg->valszama][j];
  141. }
  142.  
  143. }
  144. egyseg->kov = NULL;
  145. //printf("%d \n",egyseg->kerdesazon);
  146. return egyseg;
  147. }
  148.  
  149. kerdesegyseg *adatbetolt(FILE * fp) {
  150. kerdesegyseg* eleje = NULL;
  151. kerdesegyseg* kerdes = NULL;
  152. kerdesegyseg* elozo = NULL;
  153. while (kerdes = elemolvas(fp)) {
  154. if (eleje != NULL) { // nem az elsõ kör
  155. elozo->kov = kerdes;
  156. } else { //elsõ kör
  157. eleje = kerdes;
  158. }
  159. elozo = kerdes;
  160. }
  161. if (kerdes != NULL)
  162. kerdes->kov = NULL;
  163. return eleje;
  164. }
  165.  
  166. void printlistelems(kerdesegyseg *egyseg, int db) {
  167. for (int i = db; db>0; db--) {
  168. printf("%d\n", egyseg->kerdesazon);
  169. printf("%s\n", egyseg->kerdes);
  170. printf("kep: %s\n", egyseg->kep);
  171. printf("%c\n", egyseg->valasz);
  172. for(int j=0;j<4;j++){
  173. printf("%s\n", egyseg->cim[j]);
  174. }
  175. printf("%d\n", egyseg->valszama);
  176. for (i=0; i<(egyseg->valszama); ++i) {
  177. printf("%s\n", egyseg->v[i]);
  178.  
  179. }
  180. printf("MAGYARAZAT: %s\n", egyseg->magyarazat);
  181. egyseg = egyseg->kov;
  182. }
  183. }
  184.  
  185. void free_the_list(kerdesegyseg *eleje) {
  186. kerdesegyseg *next;
  187. if (eleje == NULL)
  188. return;
  189. while (eleje->kov != NULL) {
  190. next = eleje->kov;
  191. free(eleje);
  192. eleje = next;
  193. }
  194. }
  195.  
  196. bool print_kerdes(kerdesegyseg *eleje, int hanyadik){
  197. char betu='a';
  198. char felhvalasz='q';
  199. for(int i=1;i<hanyadik;i++){
  200. eleje=eleje->kov;
  201. }
  202. printf("\n%d\n",hanyadik);
  203. for(int i=0;i<4;i++){
  204. if(eleje->cim[i][0]!='\0'){
  205. printf("%s\n",eleje->cim[i]);
  206. }
  207. }
  208. if(eleje->kep[0]!='\0'){
  209. printf("***A kerdeshez a %s kep tartozik***", eleje->kep);
  210. }
  211. printf("\n---- \n|%s\n---- \n",eleje->kerdes );
  212. if(eleje->valasz!='x'){
  213. for(int i=0;i<eleje->valszama;i++,betu++){
  214. printf("%c.) %s\n", betu, eleje->v[i]);
  215. }
  216. }
  217. fflush(stdin);
  218.  
  219. if(felhvalasz=getchar()){
  220. printf("%c", &felhvalasz);
  221. if(felhvalasz==eleje->valasz){
  222. if(eleje->magyarazat[0]!='\0'){printf("helyes valasz\n MAGYARAZAT: %s\n", eleje->magyarazat);}else{
  223. printf("helyes valasz\n MAGYARAZAT:----\n");
  224. }
  225. return true;}
  226. else{ if(eleje->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARATAR: %s\n", eleje->magyarazat);}
  227. else{printf("helytelen valasz\n MAGYARATAR:----\n");}
  228. return false;
  229. }
  230. }
  231. }
  232.  
  233. int induljonateszt(kerdesegyseg *eleje, int ran){
  234. int pontok=0;
  235. for(int i=0;i<10;i++){
  236. ran=rand()%400; //csak a teszthez 400
  237. bool valasz=print_kerdes(eleje, ran);
  238. }
  239. return pontok;
  240. }
  241.  
  242.  
  243.  
  244. void kepekneve(kerdesegyseg *eleje,FILE *fkp){
  245. kerdesegyseg *uj=eleje;
  246. int azonell=0;
  247. char a='z';
  248. int i=0;
  249. fscanf(fkp, "%d",&azonell);
  250. while(azonell!=EOF){uj=eleje;
  251. printf("%d\n",azonell);
  252. while(uj->kerdesazon!=azonell){
  253. uj=uj->kov;
  254. }
  255. fscanf(fkp, "%c",&a); //beolvassuk a vesszőt
  256. i=0;
  257. while(a!='\n'){
  258. fscanf(fkp, "%c",&a);
  259. uj->kep[i]=a;
  260. i++;
  261. }
  262. uj->kep[i]='\0';
  263. printf("%s\n",uj->kep);
  264. fscanf(fkp, "%d",&azonell);
  265. }
  266. }
  267.  
  268. int main(int argc, char *argv[]) {
  269. srand(time(NULL));
  270. int ran=(rand())%400; //csak a teszthez 400
  271. int pontok=0;
  272. FILE* fp;
  273. fp = fopen("kerdesek_ascii.txt", "r");
  274.  
  275. kerdesegyseg *data = adatbetolt(fp);
  276. fclose(fp);
  277. FILE* fkp;
  278. fkp=fopen("kepek.txt","r");
  279. kepekneve(data,fkp);
  280. fclose(fkp);
  281. // printlistelems(data, 20);
  282. //induljonateszt(data,ran);
  283.  
  284. free_the_list(data);
  285.  
  286.  
  287. return 0;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement