Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Opera Neon: il browser AI agentico di nuova generazione
Opera Neon: il browser AI agentico di nuova generazione
Abbiamo provato il nuovo web browser con intelligenza artificiale della serie Opera accessibile tramite abbonamento. Ecco le nostre prime impressioni sulle funzionalità di Opera Neon basate su AI e come funzionano
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
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 Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
Donald Trump torna sui suoi passi: Jared...
Il razzo spaziale europeo Arianespace Ar...
La Luna è stata colpita da un pic...
Creative Aurvana Ace 3: il futuro dell'a...
AMD chiarisce una volta per tutte (si sp...
Super sconti sui Google Pixel: Pixel 10,...
Addio SRAM? La nuova tecnologia GCRAM pr...
La repubblicana Anna Paulina Luna chiede...
1.000 Hz, risoluzione HD Ready: il futur...
Polestar 4 legge la strada al tuo posto:...
Mercato auto in Italia: vola l'elettrico...
Gli AI browser aggirano i paywall: i cas...
MSI regala Football Manager 26 con sched...
Come va in casa Broadcom/VMware? Computa...
Startup Marathon 2025: chi sono le 12 az...
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: 03:25.


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