|
[ Emp @ 20.10.2005. 16:10 ] @
| Tek se upoznajem sa charima jezika C;)
Problem imam sa sledecim zadatkom:
Dva igrača Ana i Marko naizmjenično bacaju po 2 kockice za jamb. Pobjeđuje igrač koji dobije sumu koja je djeljiva sa 3. Ako oba igrača dobiju sumu djelivu sa 3, bacanja se ponavljaju sve do pobjede jednog od igrača. Napisati program koji sa standardnog ulaza učitava pozitivan cio broj n (0<n<32767), koji služi kao seed za funkciju srand, simulira datu igru i štampa poruku o pobjedniku. Po završetku jedne igre, na ekranu treba da se pojavi poruka "Za novu igru pritsnite D ili d". Ako korisnik unese D ili d, unosi se broj n i igra se nastavlja; u suprotnom, program završava rad.
Problem je u sledecem:
Zadatak sam uradio,sem sto ne umijem da uradim stavku "ako uneses D ili d ide sve iz pocetka,a ako ne zavrsava se program".Mislio sam da to uradim jednostavno koristeci naredbu while.Ali ipak nesto ne stima;)
Moje "resenje" zadatka:
#include <stdio.h>
#include <stdlib.h>
int roll(void);
enum status{Goku,Pikolo,nastavak};
int main()
{
int n,suma1,suma2;
enum status gamestatus;
char odgovor;odgovor='D';
while (odgovor=='D' || odgovor=='d'){
printf("Unesi pozitivan cio broj n (0<n<32767),koji sluzi kao seed:");
scanf("%d",&n);
srand(n);gamestatus=nastavak;
while (gamestatus==nastavak){
suma1=roll();printf("Goku je bacio %d\n",suma1);
suma2=roll();printf("Pikolo je bacio %d\n",suma2);
if (suma1 != suma2 && suma1%3==0)gamestatus=Goku;
if (suma1 != suma2 && suma2%3==0)gamestatus=Pikolo;
if (suma1 == suma2 || (suma1!=suma2 && suma1%3!=0 && suma2%3!=0))
{gamestatus=nastavak;printf("\nNOVO BACANJE:\n");}
}/* end while */
switch(gamestatus){
case Goku:printf("\nGoku je pobijedio!\n");break;
case Pikolo:printf("\nPikolo je pobijedio!\n");break;
}
printf("Za novu igru pritisnite D ili d.\n");
scanf("%c",&odgovor);/*zasto ovo ne radiiiiiiiiiiiiii????*/
}
system("PAUSE");
return 0;
}
int roll(){
int x,y,z;
x=1+(rand()%6);
y=1+(rand()%6);
z=x+y;
printf("\nBacanje:%d+%d=%d\n",x,y,z);
return z;
}
Kad trazim da korisnik unese D ili d,program jednostavno preskoci scanf().
Zadatak je radjen u Dev-C++.
Tek sam poceo da radim u jeziku C,pa bi bilo kakva sugestija/primjedba sto se tiche ovog zadatka bila vise nego pozeljna;) |
[ jocat @ 20.10.2005. 17:42 ] @
Evo kod tvog zadatka koji radi ...
Code:
#include <stdio.h>
#include <stdlib.h>
int roll(void);
enum status{Goku,Pikolo,nastavak};
int main()
{
int n,suma1,suma2;
enum status gamestatus;
char odgovor;odgovor='D';
while (odgovor=='D' || odgovor=='d'){
printf("Unesi pozitivan cio broj n (0<n<32767),koji sluzi kao seed:");
scanf("%d",&n);
srand(n);gamestatus=nastavak;
while (gamestatus==nastavak){
suma1=roll();printf("Goku je bacio %d\n",suma1);
suma2=roll();printf("Pikolo je bacio %d\n",suma2);
if (suma1 != suma2 && suma1%3==0)gamestatus=Goku;
if (suma1 != suma2 && suma2%3==0)gamestatus=Pikolo;
if (suma1 == suma2 || (suma1!=suma2 && suma1%3!=0 && suma2%3!=0))
{gamestatus=nastavak;printf("\nNOVO BACANJE:\n");}
}/* end while */
switch(gamestatus){
case Goku:printf("\nGoku je pobijedio!\n");break;
case Pikolo:printf("\nPikolo je pobijedio!\n");break;
}
flushall(); /*Evo zbog ove funkcije ce sad da radi ... pogledaj sta ona radi, pa ce ti biti jasno nadam se*/
printf("Za novu igru pritisnite D ili d.\n");
scanf("%c",&odgovor);/*zasto ovo ne radiiiiiiiiiiiiii????*/
}
system("PAUSE");
return 0;
}
int roll(){
int x,y,z;
x=1+(rand()%6);
y=1+(rand()%6);
z=x+y;
printf("\nBacanje:%d+%d=%d\n",x,y,z);
return z;
}
[ Emp @ 20.10.2005. 18:00 ] @
Ne moze.Javlja sledecu gresku:
[Linker error] undefined reference to `flushall'
A profesor nam nije spominjao nikakvu funkciju flushall.
Moze li kako bez toga;)?
[ NrmMyth @ 20.10.2005. 19:22 ] @
Makni red flushall pa kompajliraj.
Nije mi jasna svrha flushall-a?
[ Emp @ 20.10.2005. 20:01 ] @
Pa zadatak bez toga flushall je isti onakav kakav sam ga ja napisao.
On je samo dodao fushall.
Neradi ni sa tim,a ni bez toga.
Jednostavno,ne trazi mi da unesem slovo D ili d za novu igru iako sam stavio
scanf("%c",&odgovor)
[ NrmMyth @ 20.10.2005. 20:12 ] @
Probaj _flushall() .
[ Emp @ 20.10.2005. 20:22 ] @
To je to,radi.Znaci treba _flushall().Hvala.
Mada profesor nam nije rekao za tu funkciju,vjerovatno je moguce nekako i bez toga.
Inace sta radi ova funkcija?
Kad nisam chuo od profesora,onda da naucim od vas;)
[ NrmMyth @ 20.10.2005. 21:21 ] @
[ Iljo @ 23.10.2005. 23:06 ] @
Možeš to bez _flushall funkcije.
Trebaš samo u ovom redu:
Code: scanf("%c",&odgovor);
napraviti ovo:
Code: scanf(" %c",&odgovor);
E sad vidiš da je fora samo u razmaku između navodnika i %.
A to je zato jer kad ti ne staviš razmak scanf učitava i bijeline (to su ti prelazi u novi red, razmaci, tabovi i slično). A ako staviš razmak onda se takve stvari ignoriraju i ne stavljaju u taj ulazni buffer. (kojeg da isprazniš trebaš koristiti neke od flush funkcija)
Evo sad barem znaš na šta trebaš paziti.
Sorry ljudi za offtopic ali zna li netko šta se desilo sa siteom programiranje.net?
[Ovu poruku je menjao Iljo dana 24.10.2005. u 00:09 GMT+1]
[ NrmMyth @ 23.10.2005. 23:51 ] @
Citat: Sorry ljudi za offtopic ali zna li netko šta se desilo sa siteom programiranje.net?
tvrtka koja je registrirala domenu je otisla u aut.
Ovdje nas ima par sa prog.net , ali nemoj gajiti prevelike nade.
http://www.code-it.net/news.php
[ Iljo @ 24.10.2005. 12:13 ] @
Šteta šta se raspala ekipa sa p.net.
A ovaj forum "Code it" me čak izgledom malo podsječa na p.net.
No ima vidim i ovdje ljudi sa p.net-a...
Pozdrav
[ unknown-3 @ 24.10.2005. 20:38 ] @
e...u koju skoluuuu ides?!!!!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|