Come chiudere il programma nel caso si utilizzino variabili errate

di il
5 risposte

Come chiudere il programma nel caso si utilizzino variabili errate

Questo programma è un semplice minigioco. Il mio problema riguarda l'inserimento di caratteri differenti da un numero. Se inserisco una lettera il programma entra in un loop infinito invece di chiudersi. Come posso fare?

Questo è il programma:

#include <stdio.h>
#include <locale.h>
#include <math.h>

int main(){
	
	int numero;
	int a;
	int i=0;
	int esci=0;
	
	setlocale(LC_ALL,"");
	srand(time(NULL));
	a = rand()%101+0;
	printf("Inserire un numero compreso tra 0 e 100:\n");
	scanf("%d", &numero);
	if (numero==a){
		printf("Il numero inserito è corretto!\nBravo, hai completato il gioco!");
	}
	else {
		while (a!=numero || esci==0){
			if (numero>a){
				printf("Alto\n");
				esci=0;
			}
			if (numero<a) {
				printf("Basso\n");
				esci=0;
			}
			if (numero==a){
				printf("Il numero inserito è corretto!\nBravo, hai completato il gioco!");
				esci=1;
			}
			else {
				printf("Inserire un altro numero:\n");
				scanf("%d", &numero);
				esci=0;
			}
		}
			
	}
}

5 Risposte

  • Re: Come chiudere il programma nel caso si utilizzino variabili errate

    Potresti usare una stringa per leggere il numero inserito dall'utente e poi fare i dovuti controlli su di essa per verificare che sia un numero valido e nel caso in cui non lo sia gestire gli altri casi, però se si tratta di un esercizio scolastico probabilmente non ne vale la pena e di norma non viene neanche richiesto
  • Re: Come chiudere il programma nel caso si utilizzino variabili errate

    IfNotFalseTrue ha scritto:


    Potresti usare una stringa per leggere il numero inserito dall'utente e poi fare i dovuti controlli su di essa per verificare che sia un numero valido e nel caso in cui non lo sia gestire gli altri casi, però se si tratta di un esercizio scolastico probabilmente non ne vale la pena e di norma non viene neanche richiesto
    Potresti mostrarmi come con un esempio? è un es per interrogazione quindi penso che me lo chieda quasi sicuramente
  • Re: Come chiudere il programma nel caso si utilizzino variabili errate

    Controlla che l'input sia valido. La scanf restituisce 0 se il valore non è stato accettato, quindi
    
    	int res=0;
    	while (res == 0)
    	{
    		res = scanf("%d", &numero);
    		while (numero != '\n' && getchar() != '\n');
    	}
    
  • Re: Come chiudere il programma nel caso si utilizzino variabili errate

    Premesso che nel programma hai sbagliato ad includere gli header e che scanf non è esattamente la soluzione più elegante perché e praticamente usata per comodità solo in ambito didattico potresti usare un controllo di questo tipo che ho trovato su stackoverflow:
    
    /* Questi sono gli header corretti*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <time.h>
    
    /* ... */
    int numero;
    char c;
    
    if(scanf("%d%c", &numero, &c) != 2 || c != '\n')
    	/* Gestisci errore*/
    else
    	/* Il numero inserito è un intero*/
    
  • Re: Come chiudere il programma nel caso si utilizzino variabili errate

    IfNotFalseTrue ha scritto:


    Premesso che nel programma hai sbagliato ad includere gli header e che scanf non è esattamente la soluzione più elegante perché e praticamente usata per comodità solo in ambito didattico potresti usare un controllo di questo tipo che ho trovato su stackoverflow:
    
    /* Questi sono gli header corretti*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <time.h>
    
    /* ... */
    int numero;
    char c;
    
    if(scanf("%d%c", &numero, &c) != 2 || c != '\n')
    	/* Gestisci errore*/
    else
    	/* Il numero inserito è un intero*/
    

    Grazie per l'aiuto, ora ho capito!
Devi accedere o registrarti per scrivere nel forum
5 risposte