PDA

Visualizza la versione completa : [C++] Errore nell'input di un intero


alanPi
04-08-2005, 00:59
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!

oregon
04-08-2005, 01:57
Mostra il codice ... per darti una spiegazione del "loop" e di cosa devi scrivere ...

XVincentX
04-08-2005, 10:53
Una piccola soluzione potrebbe essere questa.
Mettiamo caso possono essere fatte max 9 scelte...
struttura il programma cosi



#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
}

keratox
04-08-2005, 11:02
Facciamo fatica a dare soluzioni perchŔ non sappiamo di che errore si tratta.

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

alanPi
04-08-2005, 11:15
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!

keratox
04-08-2005, 11:28
Guarda qui, una discussione identica a questa nel problema

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


Ciao

XVincentX
04-08-2005, 11:48
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˛

oregon
04-08-2005, 12:07
Prendi spunto da questo ...



#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.

LeleFT
04-08-2005, 12:34
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. :ciauz:

XVincentX
04-08-2005, 13:01
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

Loading