[C]Problema di output
M i stavo esercitando a fare qualche programmino quando mi sono imbattuto in un problema.
Il programma in questione dovrebbe essere una "sfida" a testa o croce contro il computer.
In un ciclo while (con la condizione i<=N, dove N è il punteggio massimo a cui si decide di arrivare) ho utilizzato la funzione printf ("Lancio numero i; testa o croce?\n" con i indice intero).
Nel corpo del ciclo, utilizzando la funzione rand(), ho associato i numeri pari a "testa" e quelli dispari a "croce" (operatore%) e ho considerato i casi possibili (l'input può essere 't' o 'c', di tipo char).
Tutto funziona, ma ad ogni lancio la frase di cui sopra mi appare due volte consecutive; per esempio
Lancio numero 3; testa o croce?
Lancio numero 3; testa o croce?
_
Non riesco a capire il motivo; chi mi dà una mano? Grazie.
Il programma in questione dovrebbe essere una "sfida" a testa o croce contro il computer.
In un ciclo while (con la condizione i<=N, dove N è il punteggio massimo a cui si decide di arrivare) ho utilizzato la funzione printf ("Lancio numero i; testa o croce?\n" con i indice intero).
Nel corpo del ciclo, utilizzando la funzione rand(), ho associato i numeri pari a "testa" e quelli dispari a "croce" (operatore%) e ho considerato i casi possibili (l'input può essere 't' o 'c', di tipo char).
Tutto funziona, ma ad ogni lancio la frase di cui sopra mi appare due volte consecutive; per esempio
Lancio numero 3; testa o croce?
Lancio numero 3; testa o croce?
_
Non riesco a capire il motivo; chi mi dà una mano? Grazie.
Risposte
Senza vedere il tuo codice è difficile trovare il problema, il ragionamento mi sembra corretto.
mbè... un programma non è mai perfetto.
si tratta sicuramente di un piccolo difetto, metti il codice.

si tratta sicuramente di un piccolo difetto, metti il codice.

Scusate il ritardo, ma ero impegnato questi giorni..
Ecco il codice:
Ecco il codice:
#include <stdio.h> #include <stdlib.h> #include <time.h> main() { int i,pc,user,max; char bet; srand(time(NULL)); printf("Inserire punteggio massimo\n"); scanf("%d",&max); pc=user=0; i=1; while(pc!=max && user!=max) { printf("Lancio numero %d; testa o croce?\n",i); scanf("%c",&bet); if(rand()%2==0) { if(bet=='t') { user++; printf("E' uscito testa: Pc %d Utente %d\n",pc,user); i++; } else { if(bet=='c') { pc++; printf("E' uscito testa: Pc %d Utente %d\n",pc,user); i++; } } } else { if(bet=='t') { pc++; printf("E' uscito croce: Pc %d Utente %d\n",pc,user); i++; } else { if(bet=='c') { user++; printf("E' uscito croce: Pc %d Utente %d\n",pc,user); i++; } } } } if(pc==max) { printf("Il pc ha vinto in %d lanci\n",i-1); } else { printf("L'utente ha vinto in %d lanci\n",i-1); } }
Lo trovo illegibile cosi'.
Faccio fatica a capire dove iniziano e terminano i vari IF.
Usa il "CODE".

Faccio fatica a capire dove iniziano e terminano i vari IF.
Usa il "CODE".
Il codice non è limpidissimo, ma il motivo di quell'errore non l'ho trovato.

Dovrebbe funzionare anche solo sostituendo la riga
con
ma è decisamente meglio il codice di Sergio.
scanf("%c",&bet);
con
while((bet = getchar()) != 't' && bet != 'c');
ma è decisamente meglio il codice di Sergio.
Dimenticavo: la domanda andrebbe però poi scritta come
printf("Lancio numero %d; (t)esta o (c)roce?\n", i);
Vi ringrazio, siete stati molto gentili