Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
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


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Comprare uno smartphone economico sta pe...
Google in pole position per utilizzare i...
Nintendo valuta una Switch 2 OLED con sc...
ChatGPT torna disponibile su WhatsApp in...
Non vuoi usare l'intelligenza artificial...
Metà del web ormai è bot: ...
Le big IA obbligate a cedere metà...
HP blocca anche le cartucce di inchiostr...
Acquisizione Apple: SigScalr chiude, gli...
Cooler Master HAF II 500 integra le vent...
I musulmani non dovrebbero usare le crip...
AMD Radeon 9000 pronte a sorpassare le N...
Soulframe, il nuovo gameplay chiarisce m...
La Commissione UE presenterà una ...
Niente più eliche: con due ali, i...
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: 07:51.


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