Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2003, 19: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, 21: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, 09: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, 09: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, 10: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, 10: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, 10: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, 12: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, 12: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, 12: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, 12: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, 13: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, 16: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, 16: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, 19: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, 19: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, 19: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, 20: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, 20: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, 21: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Manda la RAM Corsair in assistenza, rice...
ASUS ROG G1000 con 'AniMe Holo': saranno...
Un test di longevità ha messo alla prova...
Incat inizia i test dell'incredibile tra...
LG Sound Suite: al CES il sistema audio ...
Avengers Doomsday, il primo trailer &egr...
La crisi delle memorie non farà sconti a...
Il trailer più atteso dell'anno &...
I gamer vogliono i monitor OLED: sopratt...
Samsung alza l’asticella dei televisori ...
Energie rinnovabili 2025: quasi 42% del ...
Le auto elettriche volano in tutta Europ...
Nuovo look per la finestra Esegui su Win...
Rad Power Bikes è in bancarotta: ...
Cronos: The New Dawn diventa più ...
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: 18:16.


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