anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
potresti utilizzare un algoritmo di sorting, il seguente è l'implementazione del bubble sort per il tuo caso:
Codice sorgente - presumibilmente C/C++ |
struct gioc appoggio;
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
{
if(giocatori[i].tiri<giocatori[j].tiri)
{
appoggio=giocatori[i];
giocatori[i]=giocatori[j];
giocatori[j]=appoggio;
}
}
printf("\nClassifica\n");
for(i=0;i<4;i++)
{
printf("Il numero %i e': %s\t%i\n", i, giocatori[i].giocatore, giocatori[i].tiri);
}
|
|
|
konan_ 65 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/12/2011
|
grazie mille, anche se alla fine il prof mi ha detto che la classifica non è necessaria. le ultime 2 cose:
1) quando vado ad inserire i nomi dei giocatori come posso evitare che 2 giocatori inseriscano lo stesso nome?
2) quando vado a sceglire il numero dei giocatori vorrei che inserendo - si uscisse, come faccio?
questo è il codice fin'ora usato
Codice sorgente - presumibilmente C/C++ |
{
turno = 1;
flagVittoria = 0;
char ch;
do{
printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
fflush(stdin);
scanf("%d", &numeroGiocatori);
if (numeroGiocatori > COSTANTE){
printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
}
else if(numeroGiocatori<2){
printf("Si prega di inserire almeno 2 giocatori\n");
}
}while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);
// Compilazione delle variabili
for (i=0; i<numeroGiocatori; i++){
printf("\nInserisci un nome per il Giocatore %d (massimo %d caratteri),\npremi INVIO per confermare o - per uscire:\n", i+1, COSTANTE);
c=0;
do{
while((ch=getche()) != '\n' && ch != '\r' && c<COSTANTE){
if (ch == '-'){
exit(0);
system("pause");
}
giocatori[i].giocatore[c++] = ch;
}
if(c==0){
printf("Non hai inserito alcun nome per il giocatore %d\n", i+1);
}
}while(c==0);
giocatori[i].giocatore[c] = '\0';
giocatori[i].flagCasa = 0;
giocatori[i].tiri = 0;
giocatori[i].turnoCasa = 0;
}
}
|
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
io ti consiglierei di acquisire con scanf anziché con getche e poi confrontare le stringhe con strcmp
Codice sorgente - presumibilmente C/C++ |
int flagInserimentoNome;
for(i=0;i<COSTANTE;i++)
{
flagInserimentoNome=1;
while(flagInserimentoNome)
{
printf("Inserire il nome del giocatore %i: ", i);
scanf("%s", giocatori[i].giocatore);
if(strcmp(giocatori[i].giocatore,"-")==0)
exit(0);
flagInserimentoNome=0;
for(j=i-1;j>=0;j--)
{
if(strcmp(giocatori[i].giocatore,giocatori[j].giocatore)==0)
{
flagInserimentoNome=1;
j=-1;
}
}
}
}
|
Ultima modifica effettuata da anthony015 il 21/01/2012 alle 16:21 |
|
konan_ 65 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/12/2011
|
ho unsato getche per evitare così che un giocatore inserisca una stringa vuota, posso confrontare comunque 2 stringhe con strcmp anche se usto getche?
come posso far a far uscire dal gioco al momento della scelta del numero di giocatori premendo -?
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
Postato originariamente da konan_ 65:
come posso far a far uscire dal gioco al momento della scelta del numero di giocatori premendo -? |
è scritto nel codice sopra... |
|
konan_ 65 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/12/2011
|
no, nel codice sopra c'è la parte riguardante l'immissione del nome da parte dei giocatori, non quella che riguarda la scelta del numero di giocatori, per capirci questa
Codice sorgente - presumibilmente C/C++ |
do{
printf("Inserire il numero di giocatori (Min 2, Max %d): ", COSTANTE);
fflush(stdin);
scanf("%d", &numeroGiocatori);
if (numeroGiocatori > COSTANTE){
printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
}
else if(numeroGiocatori<2){
printf("Si prega di inserire almeno 2 giocatori\n");
}
else if(numeroGiocatori == '-' ){
exit(0);
}
}while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);
|
vorrei che anche quì, premendo il tasto -, si potesse uscire dal gioco
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
basta che sostituisci ogni volta che hai scritto confronti tra stringhe nel modo if(stringa1==stringa2) con if(strcmp(stringa1,stringa2)==0(ovviamente ogni stringa non deve essere per forza un char*, ma puoi anche mettere "stringa da comparare" o "-" come nel caso a te necessario...
|
|
konan_ 65 (Normal User)
Newbie
Messaggi: 19
Iscritto: 20/12/2011
|
dici così?
Codice sorgente - presumibilmente C/C++ |
{
turno = 1;
flagVittoria = 0;
do{
printf("Inserire il numero di giocatori e premere INVIO (Min 2, Max %d): ", COSTANTE);
fflush(stdin);
scanf("%d", &numeroGiocatori);
if (numeroGiocatori > COSTANTE){
printf("Si prega di inserire un numero di giocatori minore di %d\n", COSTANTE);
}
else if(numeroGiocatori<2){
printf("Si prega di inserire almeno 2 giocatori\n");
}
else if(strcmp(numeroGiocatori,"-")==0){
exit(0);
}
}while(numeroGiocatori<2 || numeroGiocatori>COSTANTE);
// Compilazione delle variabili
compilaVariabili();
}
|
no perchè se è così non funziona, se inserisco - me lo vede come <2 e mi dice infatti che devo inserire un numero >= a 2, se invece inserisco un numero compreso nell'intervallo il programma smette di funzionare
|
|