[C]Problema di output

VINX89
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.

Risposte
apatriarca
Senza vedere il tuo codice è difficile trovare il problema, il ragionamento mi sembra corretto.

Umby2
mbè... un programma non è mai perfetto. :D
si tratta sicuramente di un piccolo difetto, metti il codice. :wink:

VINX89
Scusate il ritardo, ma ero impegnato questi giorni..
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);
	}
}

Umby2
Lo trovo illegibile cosi'. :shock:
Faccio fatica a capire dove iniziano e terminano i vari IF.

Usa il "CODE".

Umby2
Il codice non è limpidissimo, ma il motivo di quell'errore non l'ho trovato. :?

anonymous_be1147
Dovrebbe funzionare anche solo sostituendo la riga

scanf("%c",&bet); 


con

while((bet = getchar()) != 't' && bet != 'c');

ma è decisamente meglio il codice di Sergio.

anonymous_be1147
Dimenticavo: la domanda andrebbe però poi scritta come

printf("Lancio numero %d; (t)esta o (c)roce?\n", i);

VINX89
Vi ringrazio, siete stati molto gentili

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.