PDA

Visualizza la versione completa : [C] Programma per trovare un numero con le funzioni.


battagliacom
04-06-2008, 20:39
Vorrei sottoporvi questo programma:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int in(){
int ni;
printf("Immetti un numero fra uno a cento:");
scanf("%d", ni);
}


int main(void){
int nc;
int t = 0;
srand(time(0));
nc = rand () %100;
in();
while (nc != ni){
t++;
if (ni == nc){
printf("Bravissimo hai indovinato in %d tentativi!", t);
}
else if (ni <= nc){
printf("Il numero da indovinare è maggiore di %d", ni);
in();
}
else if (ni >= nc){
printf("Il numero da indovinare è minore di %d", ni);
in();
}
}
}

Ora non riesco a terminarlo perchè mi dice che la variabile ni non esiste.
Se però cerca di inzializzarla tra i valori della funzione main, va a finire che nella prima funzione mi dice di non poterla convalidare perchè mancala variabile ni.
Come risolvere il problema? Ho provato anche a usarlosenza usare la funzione ma il risultato è sempre lo stesso.

oregon
04-06-2008, 21:36
Se l'input lo fai in una funzione, la variabile deve essere visibile sia alla funzione sia al main.

Quindi, o la rendi "globale" (dichiarandola fuori da main e fuori dalla funzione), oppure la dichiari nel main e ne passi il puntatore alla funzione in modo che quest'ultima ne possa modificare il valore.

battagliacom
04-06-2008, 22:01
ho seguito i consigli di oregon,ora iesce a compilarlo, ma si blocca quando inserisco il primo numero da valutare.

P.S. modifichero il programma del primomessaggio ad ogni suggerimento, grazie!

mondobimbi
04-06-2008, 22:03
ci sono diverse cose che non vanno



int in ( ) {
int ni;
printf("Immetti un numero fra uno a cento : ");
scanf("%d", &ni );
return ni;
}


int main (void) {

int nc;
int t = 0;
srand(time(0));
nc = rand () %100;
int ni = in() ;
printf("%d\n", ni);

while (nc != ni) {
t++;
if ( ni == nc ) {
printf("Bravissimo hai indovinato in %d tentativi!\n", t);
}
else if ( ni <= nc ) {
printf("Il numero da indovinare è maggiore di %d\n", ni);
ni =in() ;
}
else if ( ni >= nc ) {
printf("Il numero da indovinare è minore di %d\n", ni);
ni =in() ;
}
}

return (0) ;

}

MItaly
04-06-2008, 22:32
(tardissimo... :cry: )

810106
04-06-2008, 23:09
int in(int *p)
{
do {
printf("Immetti un numero fra uno a cento : ");
} while(scanf("%d", p) < 1);
return *p; /* ritorna il valore non l'indirizzo */
}

int main (void) {
int ni, nc, t = 0;

srand(time(0));
nc = rand () %100;

while (nc != in(&ni)) {
t++;
printf("%d\n", ni);
if (ni < nc ) /* <= significa minore o uguale a! */
printf("Il numero da indovinare è maggiore di %d\n", ni);
else
printf("Il numero da indovinare è minore di %d\n", ni);
}
printf("Bravissimo hai indovinato in %d tentativi!\n", t);
return 0;
}

battagliacom
06-06-2008, 22:10
grazie, ho capito l'errore che commettevo, e anche a cosa serve "return".

Purtroppo quando indovino il numero, esce direttamente dal programma, ho provato a mettere anche un system ("pause"); ma non succede niente.
Qualcuno sa cosa posso mettere per fare vedere in quanti tentativi ho indovinato?

P.S. ho provato anche con getchar();

mondobimbi
06-06-2008, 22:24
int in ( ) {
int ni;
printf("Immetti un numero fra uno a cento : ");
scanf("%d", &ni );
return ni;
}


int main (void) {

int nc;
int t = 0;
srand(time(0));
nc = rand () %100;
int ni = in() ;
printf("%d\n", ni);

while (nc != ni) {
t++;
if ( ni == nc ) {
/*
questo codice non viene mai eseguito poichè
se nc == ni il programma esce dal ciclo
while prima di aver raggiunto questo punto
*/
printf("Bravissimo hai indovinato in %d tentativi!\n", t);
}
else if ( ni <= nc ) {
printf("Il numero da indovinare è maggiore di %d\n", ni);
ni = in() ;
}
else if ( ni >= nc ) {
printf("Il numero da indovinare è minore di %d\n", ni);
ni = in() ;
}
}

/*
se sei arrivato qui vuol dire che hai indovinato
quindi è il posto giusto per fare i complimenti
*/
printf("Bravissimo hai indovinato in %d tentativi!\n", t);
return (0) ;

}

810106
06-06-2008, 22:36
Perche devi mettere la system() prima del return.
Un ritorno da maincausa la chiusura della finestra di dos!

mondobimbi
06-06-2008, 22:39
Originariamente inviato da 810106
Perche devi mettere la system() prima del return.
Un ritorno da maincausa la chiusura della finestra di dos!

stai presumendo che utilizzi windows come sistema operativo e che, in questo caso, non stia eseguendo il programma da linea di comando.

Loading