Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
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


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Iliad: si consolida la partnership tecno...
Il SoC a 2 nm di Samsung non sfigura nel...
Prezzo shock per i Galaxy Buds FE + nuov...
Il nuovo SoC di Qualcomm vuole stupire: ...
Offerta lampo per pulire l'auto: aspirap...
I robotaxi di Amazon entrano in azione: ...
ECOVACS DEEBOT T50 PRO OMNI Gen2 domina ...
iPhone 17 Pro su Amazon: tutti i colori,...
Disney Plus da 2,99 euro al mese per 3 m...
Nuovo test di accensione dei motori per ...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
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: 00:16.


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