[ InsaneThePro @ 08.01.2014. 23:42 ] @
Cao, radim pocetnicki programcic odnosnu igru Milioner i zapeo sam na nekom delu i nemam pojma zasto nece da radi.. Pa ako moze neko da mi pomogne, problem je izgleda u citanju, ne cita mi od k=4 , vec vraca staru vrednost k na 1 .. I onda mi u drugom pitanju zapne i ocita iste odgovore..
Odgovori se nalazi u txt fajlu.. Hvala


http://postimg.org/image/v57m2tio3/

evo kako izgleda :/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <ctype.h>

// DEKLARACIJA

char p1[500]="Najpoznatiji proizvodjac sokova u svetu je: ";
char p2[500]="Koja zemlja pripada Juznoj Americi: ";
static int k;
static int j;


// FUNKCIJA ZA CITANJE

int citanje()
{ j++;

int i;
FILE *fp;
char str[100];
// OTVARANJE I PROVERA FAJLA
fp = fopen("pitanja.txt","r");
if (fp==NULL)
{ perror("Fajl ne postoji.");
return (-1); }

// CITANJE REDOVA

for (i=k; i<4*j;i++)
{fgets(str,100,fp);
puts(str);
}


fclose(fp);

k=k+4;
return 0;

}



main()
{
int br=0;
int euro;
char odgovor;
printf("%s \n\n",p1);
citanje();
printf ("Unesite odgovor: %c",odgovor);
scanf("%c",&odgovor);
// PROVERA ODGOVORA
if (odgovor == 'a' || odgovor == 'b' || odgovor == 'c' || odgovor == 'd' )
{
if (odgovor == 'a' || odgovor == 'A')
{printf ("TACAN ODGOVOR!!!");

euro=300;
br++;
printf (" Trnutno stanje: %d\n",euro); }
else
{printf ("NETACAN ODGOVOR!!!");}
}


else
{printf ("Uneli ste nepostojeci odgovor!");}

// ----------------------------------------------------

if(br==1)

{


printf("%s \n\n",p2);
citanje();
printf ("Unesite odgovor: %c",odgovor);
scanf("%c",&odgovor);

if (odgovor == 'a' || odgovor == 'b' || odgovor == 'c' || odgovor == 'd' )
{
if (odgovor == 'd' || odgovor == 'D')
{printf ("TACAN ODGOVOR!!!");

euro=600;
br++;
printf (" Trnutno stanje: %d",euro); }
else
{printf ("NETACAN ODGOVOR!!!");}
}


else
{printf ("Uneli ste nepostojeci odgovor!");}

}


getchar();

}


[ glorius @ 09.01.2014. 17:29 ] @
Code:


int citanje()
{
    j++;

    int i; 
    FILE *fp;
    char str[100]; 
    // OTVARANJE I PROVERA FAJLA 
    fp = fopen("pitanja.txt","r");
    if (fp==NULL)
    { 
          perror("Fajl ne postoji.");
          return (-1); 
    }

    // CITANJE REDOVA 

    for (i=k; i<4*j;i++)
    { 
         fgets(str,100,fp);
         puts(str); 
    }
}



Ovo ce ti uvek citati od pocetka fajla, nezavisno od toga koju vrednost imaju i i j posto ti iznova otvaras file i onda je on 'resetovan na pocetak' tako da fgets() pocinje da cita od vrha fajla. Ako bi ostavili kod da bude ovakav kakav je sad trebalo bi da 'progutas' j*4 prethodna stringa i onda da citas sledeca 4:

Code:


int citanje()
{
    j++;   // ovo bi trebalo staviti na kraju ove funkcije ali da ne bi komplikovali ostavicu ovako, da je na kraju ne bi smo morali da koristimo  int m = j - 1; vec direktno promenljivu j u '***ubaceni kod' delu

    int i; 
    FILE *fp;
    char str[100]; 
    // OTVARANJE I PROVERA FAJLA 
    fp = fopen("pitanja.txt","r");
    if (fp==NULL)
    { 
          perror("Fajl ne postoji.");
          return (-1); 
    }

    // *** ubaceni kod
    int m = j - 1;
    if( m > 0 )
    { 
         for(int n = 0; n < m*4; n++)
         {
               fgets(str, 100, fp);
         }
    }
    // *** kraj ubacenog koda

    // CITANJE REDOVA 

    for (i=k; i<4*j;i++)
    { 
         fgets(str,100,fp);
         puts(str); 
    }
}



Moj savet je da malo procitas kako rade fopen(), fgets() a i trebalo bi da koristis fclose() kada zavrsis sa citanjem fajla.



[Ovu poruku je menjao glorius dana 09.01.2014. u 18:40 GMT+1]

[Ovu poruku je menjao glorius dana 09.01.2014. u 18:45 GMT+1]
[ InsaneThePro @ 09.01.2014. 18:48 ] @
Hvala.
Sad ocitava odakle treba ali ne dokle treba.. kod drugog pitanja izbaci od 4. linije pa do kraja i ispise else granu "nepostojeci odgovor" .. :/
[ glorius @ 09.01.2014. 20:00 ] @
Video sam gde je greska ali, potrudi se malo, lepo ti ide za sad :)

Mala pomoc: jedan od uslova utice na logiku kako ne bi trebalo, tako da je problem u organizaciji uslova koje si napravio.
[ InsaneThePro @ 10.01.2014. 02:47 ] @
Otisao sam skroz u drugom pravu sad, nadam se boljem... I napravio sam skoro do kraja, samo ne znam gde da stavim flush, jer kad ne restartujem igru, tj kad se restartuje sama, ostanu zapisani brojevu u promenljive, nzm kako da se izrazim :)
I ne mogu da koristim trecu pa drugu pa prvu pomoc, jer u kodu ide redno i nemam pojma kako da ga vratim iznad bez goto, a goto mi napravi beskonacan loop i razlupacu ja ovo kako vidim :D

Hvala


Odustao od onog koda jer nisam nasao gresku, koja je bila? :D

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
#include <time.h>
void delay(long seconds)                                        
{                                                                
    clock_t time1 = clock();
       clock_t time2 = time1 + seconds;
      while(time1 < time2)
       time1 = clock();
      return;
}


int main()
{
    
    
    //deklaracije//


    int prij=0;
    int polapola=0;
    int publika=0;
    int odgovor=0;
    char b,n;
    char odg=0;
    FILE *file;
    int i=0;
    char s[100],a;
    int pare=150;
    
    // ------------------------------ 
    
    
    // ----------------- EKRAN -------------------
    do
    {
        
    printf ("***************************************************\n");
    printf ("*                                                 *\n");
    printf ("*        ZELITE LI DA POSTANETE MILIONER!?        *\n");
    printf ("*                                                 *\n");
    printf ("*                  1.Nova igra                    *\n");
    printf ("*                    2.Pomoc                      *\n");
    printf ("*                    3.Izlaz                      *\n");
    printf ("*                                                 *\n");
    printf ("***************************************************\n");
    
    // -----------------------------------------------------
    
    //   UNOS OPCIJE 
    
    pare=150;
    scanf("%d",&odgovor);
    
    fflush(stdin); // sluzi da se ocisti buffer kako ne bi doslo do mesanja inputa
    switch(odgovor)
    
    
    
    // ------------- ODABRANA OPCIJA NOVA IGRA! -----------
    {
    case 1:
    
    
         
        {
     system("CLS"); // CISCENJE EKRANA
    file=fopen("pitanja.txt","r"); // OTVARANJE FAJLA
while(!feof(file)) 
{
                   // Uzimanje i stampanje pitanja i ponudjenih odgovora
        fgets(s,100,file);
        printf("%s",s);
        i++;
        
  if(i==5) // Kada dodje do tacnog odgovora (i=5)
   {
      a=fgetc(file); // a uzima tu vrednost 
      fgetc(file);
      printf("\n POMOC PRIJATELJA (F) \n POMOC PUBLIKE (G) \n POLA POLA (H)\n\n\n\"") ;
 

         
          {
      printf("\Vas konacni odgovor je: ");
      
      scanf("%c",&odg); // uzimanje odgovora
      
        fflush(stdin);
      i=0;
      // ---------------------------- POMOC PRIJATELJA ----------------
      if (odg=='f' || odg=='F')
      {{ 
                   prij++;
                   if (prij<2)
     printf("Prijatelj je prilicno siguran da je odgovor pod %c\n\n",a);
else 
printf ("iskoristili ste pomoc prijatelja!");
}
   fflush(stdin);

   printf("\nVas konacni odgovor je: ");
   scanf("%c",&odg);
   fflush(stdin);

       }}  // --------------------------------------------------------
       
        // ---------------------------- PUBLIKE ----------------
      if (odg=='G' || odg=='g')
      {{ 
                   publika++;
                   if (publika<2)
                   {
                                 
                                 if (a=='1') {
     printf("Publika : 68 misli da je pod %c, 20 pod 2, 11 pod 3 i 1 misli da je pod 4 \n\n",a);}
     else if (a=='2')
     printf("Publika : 68 misli da je pod %c, 20 pod 4, 11 pod 3 i 1 misli da je pod 1 \n\n",a);
     else if (a=='3')
     printf("Publika : 68 misli da je pod %c, 20 pod 2, 11 pod 1 i 1 misli da je pod 4 \n\n",a);
     else if (a=='4')
     printf("Publika : 68 misli da je pod %c, 20 pod 2, 11 pod 3 i 1 misli da je pod 1 \n\n",a);
     
}
else 
{
printf ("iskoristili ste pomoc publike!");

}
   fflush(stdin);

   printf("\nVas konacni odgovor je: ");
   scanf("%c",&odg);
   fflush(stdin);

       }}  // --------------------------------------------------------
       
               // ---------------------------- POLA POLA ----------------
      if (odg=='H' || odg=='h')
      {{ 
                   polapola++;
                   if (polapola<2)
                   {
                                 
                                 if (a=='1') {
     printf(" %c ILI 2",a);}
     else if (a=='2')
     printf(" %c ILI 1",a);
     else if (a=='3')
     printf(" %c ILI 4",a);
     else if (a == '4')
     printf(" %c ILI 3",a);
     
}
else 
{
printf ("iskoristili ste pomoc publike!");

}
   

   printf("\nVas konacni odgovor je: ");
   scanf("%c",&odg);
   fflush(stdin);

       }}  // --------------------------------------------------------
     
    
      if (a==odg) // Ako je odgovor tacan i5 = uneta vrednost stampa se naredba dole
       {
                pare=pare*2; // Pare se dupliraju svaki put kada je odgovor tacan
                
       printf("TACAN ODGOVOR!!! :D\n\n");
       
       printf("TRENUTNO STANJE: %d $",pare);
         delay(1500);
       system("CLS");
       }
       
   
       
       else  // Ako je odgovor razlicit od a (i=5)
       {
       printf("NETACAN ODGOVOR!!! :(\n");
        {
       if(pare==150)
       pare =0 ; 
    }
           
   
        printf("OSVOJILI STE : \t %d $" ,pare );
       delay(4500);
       
       system("CLS"); 
    
    break;
   
       }
    } 
}
      break; }
// -------------------------------------------------
// --------- ODABRANA OPCIJA POMOC -------
case 2:
    {
        printf("*************!! Dobro dosli u igru milioner !!************** \n\nDa bi ste osvojili maksimalnu sumu potrebno je da odgovorite na svih 15 pitanja tacno. \nNa pitanja odgovarate rednim brojevima 1 , 2 , 3 i 4 !!!");
        printf("\n\nZa povratak na pocetak, pritisnite bilo koji taster... ");
         getch();
         system("CLS");break;
        
    }
    
    // ------------------------------------
    // ODABRANA OPCIJA EXIT 
case 3: exit(0);break;
       }
    
        system("CLS");
}while(1);
    
}