PDA

Visualizza la versione completa : [VC6++] Aiutatemi


Daniele80
17-05-2002, 15:42
Ciao ragazzi,
chiedo il vostro aiuto perchè non riesco a risolvere quaeto problema:
Io devo leggere dei nomi, e questi vanno messi dentro ad un record. Funziona tutto tranne per una cosa, cioè che non mi inserisce il primo, lo lascia vuoto.
MI spiego meglio se io voglio inserire: Daniele, Dario, Laura,
la funzione non so perchè ma inserisce solo Dario e Laura.

Aiutatemi vi prego.

il prototipo:
char InsGiocatori();


la funzione è:
char InsGiocatori()
{
int cont;
printf("In quanti volete giocare? max4 : ");
scanf("%d",&n);
if ((n>4)&&(n<2))
{
printf("Al massimo 4 e minimo 2 giocatori\n");
InsGiocatori();
}
for(cont=0;cont<n;cont++)
{
printf("Inserire il nome del giocatore : ");
gets(v[cont].nome);
}
}

r0x
19-05-2002, 19:30
if ((n>4)&&(n<2))
{
printf("Al massimo 4 e minimo 2 giocatori\n");
InsGiocatori();
}


Ehm...io direi che quella chiamata ricorsiva è altamente fuori luogo, prima di tutto (parlo della chiamata a InsGiocatori())! :D Usa un ciclo infinito! Inoltre, in quello stesso if non ci va && ma ||. Scritto così quell'if è superfluo, perché sarà SEMPRE falso! :) Pensaci: un numero può essere CONTEMPORANEAMENTE (&&, and logico) minore di 2 e maggiore di 4? :dottò:

Guarda:



char InsGiocatori()
{
int cont, n;

while( 1 ) // ciclo infinito
{
printf( "In quanti volete giocare? " );
scanf( "%d", &n );

if( ( n < 2 ) || ( n > 4 ) )
{
printf( "Al massimo 4 e minimo 2 giocatori\n" );
continue; // ripete la richiesta
}

for( cont = 0; cont < n; cont++ )
{
printf( "Inserire il nome del giocatore: " );
gets( v[ cont ].nome );
}

break;
}
}


In alternativa puoi usare anche un goto evitando il ciclo.

Ciao.

Daniele80
19-05-2002, 19:33
ti ringrazio ma ho risolto già da un bel pò, avevi ragione per la if && era inutile, però me ne son accorto subito dopo aver postato.

ciao e grazie lo stesso

Loading