Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    19

    [C++] Errore nell'input di un intero

    Salute programmatori!
    Mi presento con la solita domanda stupida delle mie...
    Ho scritto un semplice programma C++ da consolle, col classico menù "gita 1 per questo, digita 2 per quello". Con "cin >>" leggo un intero ed eseguo il corrispondente resto del codice.
    Il problema sorge nel caso che al posto di un numero digito una lettera: il programma entra in un misterioso loop e devo terminarlo con ctrl-c.
    Qualcuno può suggerirmi due righe di codice facile facile per ovviare a questo problema?

    Grazie e buona giornata!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mostra il codice ... per darti una spiegazione del "loop" e di cosa devi scrivere ...

  3. #3
    Una piccola soluzione potrebbe essere questa.
    Mettiamo caso possono essere fatte max 9 scelte...
    struttura il programma cosi

    codice:
    #include <iostream.h>
    int scelta;
    
    void main(void) 
    {
    inizio:
    cout <<"Digita 1 per questo";
    cout <<"Digita 2 per questo";
    //E arrivi fino a 9
    cin >> scelta;
    if (scelta < 10 and > 1) 
    {
    //Continui col tuo codice
    }
    cout <<"Scelta errata. Riprovare";
    cout << endl;
    goto inizio
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Facciamo fatica a dare soluzioni perchè non sappiamo di che errore si tratta.

    I linguaggio del codice chiarirebbe di piu' della spiegazione del problema.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    19
    Il codice di XVincentX rende perfettamente l'idea. Ho provato a compilarlo senza avere errori, ma quando lo eseguo, se invece che un numero digito caratteri, tipo "abc", e poi premo invio il programma si blocca. E' lo stesso errore che ho col mio programma.
    Deve essere un problema della funzione cin, che cerca di convertire in numero quello che viene digitato come carattere. Credo.
    In Java avrei potuto leggere il numero come fosse una stringa e cercare una conversione racchiudendola in un blocco try-catch, ma in C++ non so se si può fare e comunque non so come.
    Grazie ancora!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Guarda qui, una discussione identica a questa nel problema

    http://scienze.unibas.it/lb/topic.do?t_id=244


    Ciao

  7. #7
    Se non ricordo male nel mio codice usi un int, che restituisce 0 se usi un carattere al posto di un numero...avrebbe dovuto funzionare, ma non saprei. Proverò

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prendi spunto da questo ...

    codice:
    #include <iostream>
    
    using namespace std;
    
    void main(void) 
    {
    	char scelta;
    
    	while(1)
    	{
    		cout << endl << "Menu" << endl << endl;
    		cout << "1 - Scelta 1" << endl;
    		cout << "2 - Scelta 2" << endl;
    		cout << "0 - Termina" << endl << endl;
    		cout << "Selezione: ";
    		cin >> scelta;
    
    		if(scelta=='0') break;
    
    		switch(scelta)
    		{
    			case '1':
    				cout << "(Scelto Menu1)" << endl;
    				//Menu1();
    				break;
    			case '2':
    				cout << "(Scelto Menu2)" << endl;
    				//Menu2();
    				break;
    			default:
    				fflush(stdin);
    				cout << endl << "Scelta errata. Riprovare." << endl << endl;
    				break;
    		}
    	}
    }
    Per XVincentX: ho visto l'esempio che hai proposto e vorrei darti dei consigli ...

    1) L'uso del goto e' fortemente sconsigliato in C (come in altri linguaggi ...); usa le istruzioni per impostare un ciclo;

    2) Questa linea

    if (scelta < 10 and > 1)

    non è scritta in C (and non è una keyword del C) ed è sbagliata sintatticamente in quanto la variabile scelta deve comparire due volte ... dovrebbe essere

    if (scelta < 10 && scelta > 1)

    3) l'uso di variabili con visibilità maggiore del dovuto e' sconsigliato; la variabile "scelta" deve essere dichiarata all'interno del main.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Aggiungo che se non c'è un'istruzione exit o return, all'interno dei blocchi if il codice di XVincentX andrà sempre e comunque in loop.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Ammazz faccio proprio pena in C++...

    1) L'uso del goto e' fortemente sconsigliato in C (come in altri linguaggi ...); usa le istruzioni per impostare un ciclo;
    Ok!

    2) Questa linea

    if (scelta < 10 and > 1)

    non è scritta in C (and non è una keyword del C) ed è sbagliata sintatticamente in quanto la variabile scelta deve comparire due volte ... dovrebbe essere

    if (scelta < 10 && scelta > 1)
    Me ne sono accorto da solo e ho corretto
    3) l'uso di variabili con visibilità maggiore del dovuto e' sconsigliato; la variabile "scelta" deve essere dichiarata all'interno del main.
    Piccolo errore di distrazione

    spero di migliorare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.