Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Spanzuratoarea  (Citit de 3358 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
minisudi
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« : Ianuarie 08, 2014, 01:40:31 »

Am de facut o problema care simuleaza jocul de spanzuratoarea
cerinta suna cam asa

Input: un fisier care sa contina x cuvinte, x nu va fi in fisier si numarul maxim de incercari pe care il acceptati pana la terminarea jocului.

Alegeti random un cuvant, de la tastatura introduceti cate un caracter, daca acel caracter nu se afla in cuvant se va afisa un mesaj corespunzator, in caz contrar cuvantul obtinut dupa completarea caracterului.


problema functioneaza aproximativ...adica daca introduc o litera de la tastatura o sa imi arate ceva de genul

Tasteaza litera care crezi ca se afla in cuvant: a

m o _ _ o
Tasteaza litera care crezi ca se afla in cuvant:
Litera aceasta nu se afla in cuvant
m o _ _ o
Tasteaza litera care crezi ca se afla in cuvant:

Cand spune a doua oara "Tasteaza litera care crezi ca se afla in cuvant:" pur si simplu programul sare de parca am introdus un enter sau altceva,dar a treia oara "Tasteaza litera care crezi ca se afla in cuvant:" merge si se tot repeta pana se termina numarul de greseli sau pana gasesc cuvantul....O sa postez codul

Cod:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

FILE *f;

int main()
{
     char s[25],copie[25],litera;
     int x,nr=0,i,aux=0,ok,gasit_odata,nrgreseli;
     f=fopen("fisier.txt","r");

     //testam fisierul daca e vid

     if(f!=NULL)
            printf("Fisier deschis cu succes");
     else printf("Fisierul nu s-a deschis cu succes");

     //Gasim numarul de gresi permise

     while(fgets(s,25,f)!=NULL)
            nr++;
     int y=atoi(s);
     nrgreseli=y;
     printf("\n Numarul greseli maxime este %d",nrgreseli);
     fclose(f);

     //generam random un x care va fi cuvantul de ghicit

     x=rand()%(nr-1);

     //gasim cuvantul x in fisier
     f=fopen("fisier.txt","r");
     aux=1;
     while(fgets(s,25,f)!=NULL)
     {
         if(aux==x)
            break;
         else
            aux++;
     }

     //Creem copia cuvantului pentru apartii

     for(i=0;i<strlen(s)-1;i++)
        copie[i]=s[i];

     //Printez pe ecran cuvantul in faza originala

     aux=0;
     printf("\n");
     for(i=0;i<strlen(s)-1;i++)
     {
          if(i==0)
          {
              printf(" %c",s[i]);
              copie[i]='0';
              aux++;
          }
          else
            if(i==strlen(s)-2)
            {
                printf(" %c",s[strlen(s)-2]);
                copie[i]='0';
                aux++;
            }
          else
            if(s[i]==s[0] || s[i]==s[strlen(s)-2])
            {
                printf(" %c",s[i]);
                copie[i]='0';
                aux++;
            }
          else
            printf(" _ ");
     }

     // Programul de introducere a literelor

     while(aux<=strlen(s)-2 && nrgreseli>0)
     {
         printf("\n Tasteaza litera care crezi ca se afla in cuvant: ");
         scanf("%c",&litera);
         ok=0;
         gasit_odata=0;
         for(i=0;i<strlen(s)-1;i++)
         {
             if(aux<=strlen(s)-2 && nrgreseli>0 && litera==s[i] && copie[i]!='0')
             {
                    copie[i]='0';
                    aux++;
                    ok=1;
             }
             if(aux<=strlen(s)-2 && nrgreseli>0 && litera==s[i] && copie[i]=='0')
                    gasit_odata=1;
         }
         if(ok==1)
            printf("\n Felicitari ai gasit o litera ce apartine cuvantului");
         else
         {
            printf("\n Litera aceasta nu se afla in cuvant ");
            nrgreseli--;
         }
         if(gasit_odata==1)
                printf("\n Litera aceasta ai mai introduso odata sau se afla deja in cuvant");

         printf("\n");
         for(i=0;i<strlen(s)-1;i++)
            if(copie[i]=='0')
                printf(" %c",s[i]);
            else
                printf(" _ ");
     }
     if(nrgreseli>0)
        printf("\n Felicitari ai gasit cuvantul");
     else
            printf("\n Imi pare rau dar ai prea multe incercari");

     return 0;
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #1 : Ianuarie 08, 2014, 12:34:36 »

Probabil ramane caracterul '\n' (newline) in buffer. Ai putea sa fortezi scoaterea acestuia citit asa scanf("%c\n",&litera). Dar tot o sa ai probleme daca introduci mai multe caractere. Ar fi ok sa citesti toata linia cu fgets si iei doar prima litera.
Memorat
minisudi
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #2 : Ianuarie 08, 2014, 14:47:52 »

Multumesc de raspuns stiu ca o sa am probleme daca introduc mai multe caractere dar eu vroiam sa introduc doar unul a si cum mi-ai zis tu nu a mers...dar daca am pus scanf("\n%c",&litera a mers),oricum daca nu era pentru raspunsul tau nu imi dadeam seama
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines