Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ne radi mi sve na igra vjesala u c-u

[es] :: C/C++ programiranje :: Ne radi mi sve na igra vjesala u c-u

[ Pregleda: 2369 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zlatko84
Zlatko Ivanovic
B&H

Član broj: 56218
Poruke: 45
*.inecco.net.



Profil

icon Ne radi mi sve na igra vjesala u c-u13.09.2006. u 11:39 - pre 214 meseci
Pomagajte kolege.Napisao sam program za igru vjesala u C-u ali mi ne radi dobro.Prvo ne radi mi "malloc" kada treba da alocira memoriju odnosno kad provjerava da li u datoteci ima rijeci koje ne mogu da se prikazu.Drugo kada zelim ponovo da igram nakon par puta mi zaglavi a zasto ne znam.I trece kada se u datoteci nalazi jedna rijec ali samo rijec bez entera kaze mi da je datoteka prazna.Molim Vas ako mozete da mi pomognete.Evo Vam i kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
/*Ne radi malloc za alociranje memorije, kada je jedna rijec u datoteci i
kada ponovo zelimo da igramo nakon nekoliko puta zaglavi!!!*/
int PrebrojRijeci(FILE * in){
char c='a',prethodnic;
int maxDuzina=0,duzina=0,brojRijeci=0;
while(1){
prethodnic=c;
c=getc(in);
if(c=='\n') {
if(duzina>maxDuzina)maxDuzina=duzina;
duzina=0;
brojRijeci++;
}else duzina++;
if(c==EOF)
{
if(prethodnic!='\n') brojRijeci++;
break;
}
}
if(maxDuzina==0)
brojRijeci=0;
if(maxDuzina>1024) printf("Upozorenje.U fajlu ima rijeci duzih od 1024 karaktera!");
return brojRijeci;
}
char * Procitaj(FILE *in,int brojReda){
int uRedu=0,duzina=0,i=0;
char c,*rijec;
long pocetakReda;
while(uRedu<brojReda){
c=getc(in);
if(c=='\n') {
uRedu++;
pocetakReda=ftell(in);
}
}
duzina=0;
while(1){
c=getc(in);
if(c=='\n'||c==EOF){
fseek(in,pocetakReda,SEEK_SET);
break;
}else duzina++;
}
/*if(duzina>80) return NULL; Zbog toga sto rijec ne moze cijela da stane na ekran! */
*rijec=(char *)malloc(sizeof(char) * duzina);
if(rijec==NULL) return NULL;
i=0;
while(1){
c=getc(in);
if(c=='\n'||c==EOF){
rijec='\0';
break;
}else rijec[i++]=(isupper(c))?tolower(c):c;
}
return rijec;
}
int prikazi(char c,char *rijec,char *skrivenarijec){
int otkrivena=1;
char *poc=skrivenarijec;
while(*rijec!='\0'){
if(*rijec==c) *skrivenarijec=c;
rijec++;
skrivenarijec++;
}
while(*poc!='\0'){
if(*poc=='*') {
otkrivena=0;
break;
}else poc++;
}
return otkrivena;
}
void nacrtaj(int j){
printf(" ---\n");
printf(" |\n");
switch(j){
case 1: printf(" O\n");break;
case 2: printf(" O\n");printf(" /\n");break;
case 3: printf(" O\n");printf(" / \\\n");break;
case 4: printf(" O\n");printf(" /|\\\n");break;
case 5: printf(" O\n");printf(" /|\\\n");printf(" /\n");break;
case 6: printf(" O\n");printf(" /|\\\n");printf(" / \\\n");break;
default : printf("\n");
}
}

int main(int argc, char** argv){
FILE *in;
int i,brojrijeci=0,randomBr,brojPogadjanja=0,unijetiKarakteri[256],pogodio=0;
char YesNo='d',*rijec,*pomRijec,c;
if(argc!=2){
printf("Greska!\n<Ime programa> <ime ulazne datoteke-rijecnika>\n");
return 0;
}
in=fopen(argv[1],"r");
if(in==NULL || in=='\n'){
printf("Datoteka je prazna ili ne postoji!");
return 0;
}
brojrijeci=PrebrojRijeci(in);
fseek(in,0,SEEK_SET);
if(!brojrijeci){
printf("U datoteci ne postoji niti jedna rijec!");
return 0;
}
while (YesNo=='d'){
for(i=0;i<256;i++)
unijetiKarakteri=0;
clrscr();
YesNo='n';
if(YesNo=='d') in=fopen(argv[1],"r");
randomize();
randomBr=random(brojrijeci);
while((rijec=Procitaj(in,randomBr))==NULL)
if(fseek(in,0l,SEEK_SET)){
printf("Greska prilikom poziva fseek() funkcije!");
return 0;
}
close(in);
*pomRijec=(char *)malloc(strlen(rijec)+1);
for(i=0;i<strlen(rijec);i++)
pomRijec='*';
pomRijec='\0';
brojPogadjanja=0;
for(i=0;i<256;i++)
unijetiKarakteri=0;
printf("\n%s\n",pomRijec);
while(brojPogadjanja<7){
while(!isalpha(c=getch()));
/*if(c=='\n')continue;*/
c=(isupper(c))?tolower(c):c;
pogodio=0;
if((unijetiKarakteri[c]==1)&&(c!='\n')) {
printf("\nKarakter '%c' vec jednom unijet!",c);
continue;
}else unijetiKarakteri[c]=1;
if(strchr(rijec,c)!=NULL)
pogodio=prikazi(c,rijec,pomRijec);
else
{
if(++brojPogadjanja==6)
{
clrscr();
nacrtaj(6);
printf ("\nKraj IGRE!!! Objeseni ste!!!");
break;
}
}
if(pogodio){
system("cls");
printf("Cestitamo!\nRijec koju ste pogadjali je '%s'\n\n",rijec);
break;
}
else{
system("cls");
printf("%s\n\n",pomRijec);
if(brojPogadjanja)nacrtaj(brojPogadjanja);
}
}
printf("\nZelite li da ponovo igrate (d\\n)?\n");
YesNo=getchar();
}
}

Unaprijed zahvaljujem!
Zlatko I.
Zlatko
 
Odgovor na temu

Tiristor
Skola/obrazovanje

Član broj: 102849
Poruke: 184
*.inffo.net.



Profil

icon Re: Ne radi mi sve na igra vjesala u c-u13.09.2006. u 19:11 - pre 214 meseci
Probaj da kod funkcije malloc stavis konverziju tipa, meni se cini da mi je to pravilo probleme kad sam pisao neki program u Tc++, a kada sam pisao u obicnom C-u nije bilo nikakvih problema.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Ne radi mi sve na igra vjesala u c-u

[ Pregleda: 2369 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.