Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Complete è un robot aspirapolvere che coniuga un'aspirazione potente e un lavaggio con rullo a logica di intelligenza artificiale che guida al meglio nella pulizia di casa: rulli e spazzole estensibili a pulire gli angoli e una base di ricarica che lava e ripristina il robot al emglio delle sue funzionalità dopo ogni azione di pulizia
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2003, 18:34   #1
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
Help C++

Ciao a tutti,
Ho un problema con C++...

Come faccio a sapere se una variabile inserita tramite cin>>x; è
un double oppure no?

Grazie
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2003, 20:52   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Codice:
    double x;
    if(cin >> x)
        cout << "Giusto" << endl; 
    else
        cout << "Sbagliato" << endl;
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 08:34   #3
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
grazie per la risposta, però non ho capito come posso usarlo qui:

Codice:
int n =0;
while (n<5) {		//controlliamo che i lati siano più di 4
    cout<<"Inserisci il numero dei lati ( >4 ): ";
    cin>>n;
}
Ho provato a mettere quel controllo in diversi modi ma se inserisco un carattere va in loop
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 08:56   #4
l.golinelli
Senior Member
 
Iscritto dal: Jan 2002
Città: Imola
Messaggi: 1116
Codice:
int x;
do
{
   if(cin >> x) 
        cout << "Giusto" << endl; 
    else 
        cout << "Sbagliato" << endl; 
}
while(x < 5);
l.golinelli è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 09:04   #5
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
anche questo codice produce un loop se inserisci un char
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 09:11   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Codice:
do 
{ 
   while(!(cin >> x)) 
        cout << "Devi inserire un numero intero" << endl; 
   if(x >= 5)
        cout << "Devi inserire un numero intero minore di 5" << endl; 
} 
while(x < 5);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 09:23   #7
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
ancora loop...
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 11:11   #8
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Bisogna ricordarsi di "ripulire" il canale dopo l'errore... se non lo fai continua a rimanerti il vecchio input, da qui il loop.
ad esempio (non bellissimo lo ammetto ):
Codice:
int n;
while(true)
{
    cin >> n;
    if ( ! cin )
    {
        cout << "Non un numero" << endl;
        // ripuliamo il canale...
        cin.clear();
        while( cin.peek() != '\n' )
            cin.ignore();
    }
    else if ( n >= 5 )
        cout << "Il numero deve essere < 5 " << endl;
    else
    {
        cout << "Blabla!" << endl;
        break;
    }
}
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 11:17   #9
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
In alternativa si puo' usare uno stream sulle stringhe per controllare il tutto:
Codice:
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

/*...*/

int n;
while( true )
{
	string s;
	cin >> s;  // in alternativa getline(cin,s);
	istringstream in(s);
	in >> n;
	if ( ! in )
	{
		cout << "Non un numero" << endl;
	}
	else if ( n >= 5 )
	{
		cout << "Il numero deve essere < 5 !" << endl;
	}
	else
	{
		cout << "ok!" << endl;
		break;
	}
}
Edit : corretto il codice
Ri-ri-edit: maledette tabulazioni !
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 11:21   #10
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Anche se poco elegante, questo può funzionare? (non provato)

Codice:
char x[100];
char *stopstring;
long ll;

do { 
   cin>>x;
   ll = strtol(x,stopstring,10);
   } while((ll==0) && (!strcmp(x,"0")));
Se poi i numeri devono essere maggiori di 4, si potrebbe fare:

Codice:
char x[100];
char *stopstring;
long ll;

do { 
   cin>>x;
   ll = strtol(x,stopstring,10);
   } while(ll<5);
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 11:28   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi ero scordato della pulizia
Infatti ho provato e credo che la soluzione più semplice sia questa:
Codice:
int x;
do 
{ 
   while(!(cin >> x))
   {
        cout << "Devi inserire un numero intero" << endl;
        cin.clear(); //elimino i flag di errore
        cin.ignore(INT_MAX,'\n'); //ripulisco lo stream
    }
   if(x < 5) 
        cout << "Devi inserire un numero intero maggiore di 5" << endl; 
} 
while(x < 5);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 12:16   #12
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
Grazie mille!!!

solo 2 chiarimenti:

1: Cosa fa cin.ignore(); ?

2: cin.ignore(INT_MAX,'\n'); mi da errore INT_MAX (undeclared identifier)
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 15:05   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "morpheus72"

Grazie mille!!!

solo 2 chiarimenti:

1: Cosa fa cin.ignore(); ?

2: cin.ignore(INT_MAX,'\n'); mi da errore INT_MAX (undeclared identifier)
cin.ginore() toglie un carattere dallo stream (o non lo toglie se è arrivato alla fine dello stream)...
cin.ignore(INT_MAX,'\n') prende un massimo di INT_MAX caratteri dallo stream fino a quando incrontra \n...

Per includere INT_MAX:
#include <limits.h>
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 15:41   #14
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
Grande...
Adesso funge tutto!
Ancora thanks
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 18:02   #15
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
Anche se...

se inserisco valori tipo 7,5

legge il 7 come primo input e il valore di input successivo me lo vede come errore (anche se ancora non l'ho digitato)
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 18:07   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quello è normale...
Non so come tu possa evitarlo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 18:39   #17
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originally posted by "morpheus72"

Anche se...

se inserisco valori tipo 7,5

legge il 7 come primo input e il valore di input successivo me lo vede come errore (anche se ancora non l'ho digitato)
Se non ricordo male funzioni come strtol si fermano al primo carattere non numerico. E' possibile quindi che lo stream si comporti in modo analogo e si fermi prima della virgola durante la scansione.
Se vuoi evitare questi problemi allora usa il secondo metodo che ti ho suggerito. In questo modo leggerai l'intera stringa "7,5" in s e poi verra' tentata la conversione. In ogni caso dallo stream verranno eliminati tutti e tre i caratteri. Occhio pero' che con questo metodo se scrivi due numeri (separati da spazi) sulla stessa linea sara' come inserire due numeri distinti. Se vuoi invece leggere tutta la riga e ignorare tutti cio' che va oltre al primo valore (che sia testuale o numerico) sostiuisci la riga
Codice:
cin >> s;
con la riga
Codice:
getline( cin , s );
per leggere cosi' una riga intera.
Cosi' facendo un input del tipo
3 4.34 fdrr
verra' considerato valido (valore 3)
mentre
a3 1
no.

Edit: dimenticavo: per utilizzare istringstream ricordati di includere l'header <sstream>
(ora correggo anche il codice)
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 19:03   #18
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
Mi da questo errore di compilazione:

Codice:
error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> >' (or there is no acceptable conversion)
con getline:

Codice:
error C2780: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &,const _
E)' : expects 3 arguments - 2 provided
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 19:20   #19
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Usi il compilatore della Microsoft ?

Quote:
Originally posted by "morpheus72"

Mi da questo errore di compilazione:

Codice:
error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> >' (or there is no acceptable conversion)

Questo non lo capisco proprio... non esiste l'operatore '>>' per le string !?!?!?!?

Quote:
Codice:
error C2780: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A> &,const _
E)' : expects 3 arguments - 2 provided
Sembra che non utilizzi il parametro di default
Con
getline(cin , s , '\n' )
questo dovrebbe andare.

Sinceramente il primo errore e' proprio strano ! L'unica cosa che posso dire e'.... controlla se non ci sono errori di battitura su cin , altrimenti non puoi che incolpare il compilatore, il codice compila correttamente sul mio pc ( compilatore GNU e Intel).
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2003, 20:05   #20
morpheus72
Member
 
L'Avatar di morpheus72
 
Iscritto dal: May 2003
Messaggi: 61
mi puoi dire dove posso scaricare il compilatore che usi?
morpheus72 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
La NASA ha lanciato il nuovo Nancy Grace...
22 offerte Amazon da non perdere, dalla ...
Bose QuietComfort Earbuds a 129,95€: ANC...
L'unico con tante scorte, non fatevi sca...
Torna il super doppio sconto sulle e-bik...
Offerte Amazon componenti PC: RTX 5060 T...
Crucial Pro DDR5 da 32GB a 389,99€: perc...
Fable 5, il modello più potente d...
PC all-in-one Lenovo super elegante, per...
Lo Smart TV più venduto su Amazon...
Periferiche gaming in offerta su Amazon:...
L'IA non è una bolla, ma pu&ograv...
Il cinema in salotto: oggi TV Xiaomi QLE...
Passa a ho. Mobile, fino a fine agosto c...
Ai Giochi di Pechino i robot prendono fu...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v