PDA

Visualizza la versione completa : [C] Indovina il numero!


Seal0906
18-03-2015, 14:16
Salve ragazzi :ciauz:, sono nuova del forum, e già per altri esercizi di programmazione i vostri aiuti e commenti ad altri utenti sono stati preziosi! :D

Sto avendo problemi con una parte del programma "Indovina il numero!".

Non ho incontrato difficoltà nello scrivere il programma in sè, ma non so proprio come far ripartire il gioco..
Questo è il mio programma, aspetto il vostro aiuto!



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


void indovina(int n, int guess);


int main(){


int guess = 0;
int n = 0;


n = 1 + rand() % 1000;

printf("I have a number between 1 and 1000.\nCan you guess my number?\nEnter your first guess: ");
scanf("%d", &guess);


indovina(n, guess);




return 0;
}


void indovina(int n, int guess){


char yon = 0;


while(guess != n){


if( guess <= n ){


printf("Too low. Try again: ");
scanf("%d", &guess);
}


else {


printf("Too high. Try again: ");
scanf("%d", &guess);
}


}/*fine while*/


if( n == guess){


printf("Excellent! You guessed the number!\nWould you like to play again(y or n)?");
scanf("%c", &yon);


/*COME FACCIO A FAR RIPARTIRE IL GIOCO?*/
}
}

Xaratroom
18-03-2015, 14:18
Inserisci tutto il tuo codice in un do { /*Tuocodice*/ } while(/*utente vuole continuare*/);



main() {
bool continua;

do {
...
} while(continua);

return 0;
}

Seal0906
18-03-2015, 14:19
Sì, lo so che mi genererà sempre lo stesso numero ahah, ma per ora il mio problema è far ripartire il gioco!
Aggiungere srand non mi sarà tanto difficile :P

Seal0906
18-03-2015, 14:23
Mh, cosa sarebbe quel "
bool continua;" ?

Ho un altro problema in realtà, non mi da' la scanf dopo aver visualizzato il messaggio di vincita.

Xaratroom
18-03-2015, 14:23
un flag di controllo...

Seal0906
18-03-2015, 14:27
Ma io sto programmando in C.. E cercando su internet il "bool" si usa in C++..

Xaratroom
18-03-2015, 14:35
Scusami, orario pranzo...

Guarda qui:


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


int indovina(int n);


int main(){
int n = 0;
srand(time(NULL));


do {
n = 1 + rand() % 1000;
} while(indovina(n));


return 0;
}


int indovina(int n){
char yon = 0;
int guess = 0;

printf("I have a number between 1 and 1000.\nCan you guess my number?\nEnter your first guess: ");
scanf("%d%*c", &guess);

while(guess != n){
if( guess <= n ){
printf("Too low. Try again: ");
} else {
printf("Too high. Try again: ");
}
scanf("%d&*c", &guess);
}/*fine while*/


printf("Excellent! You guessed the number!\nWould you like to play again(y or n)?");
scanf("%c", &yon);
if(yon == 'y') {
return 1;
} else {
return 0;
}
}

La funzione indovina ora contiene tutta la logica di gioco e restituisce se l'utente vuole (o meno) continuare a giocare.
Quando leggi un intero con scanf è buona norma buttare via lo \n con la direttiva di formattazione %*c...
Vedi se funziona perché non l'ho provato.

Seal0906
18-03-2015, 14:38
Penso che nell'ultimo if sia yon invece di c :)

Adesso lo provo!

Seal0906
18-03-2015, 14:45
Funziona!

Adesso me lo "studio" per bene, perché il tuo è molto più ordinato! ahah

Grazie mille! :D

Xaratroom
18-03-2015, 14:48
Comunque quella funzione è poco elegante.... per renderla poco poco migliore andrebbe spostato il "messaggio di game over" nel main e sarebbe bello se la funzione restituisse lo score (ovvero il numero di tentativi)

Loading