Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-09-2014, 16:14   #1
carugo
Member
 
Iscritto dal: Oct 2008
Messaggi: 42
[c++] controllo input

Ciao a tutti
Codice:
#include <cstdlib>
#include <iostream>

using namespace std;

const int MAX_FIUMI = 300;
const int MAX_CITTA = 100;

int FiumiCitta [MAX_FIUMI] [MAX_CITTA] ;


void CaricaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA],
                     int n_fiumi, int n_citta)
{
                  
               
  for (int fiumi=0; fiumi<n_fiumi; fiumi++)
    for (int citta=0; citta<n_citta; citta++)
    {    
      do 
        {  
          cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<<
                       " bagna la citta " <<citta +1 << " ,0 se non la bagna ";
          cin >>FiumiCitta [fiumi] [citta]; cout <<endl;
            if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1)
            
               cout  <<" Errore inserire 1 o 0" <<endl;
                
          }
            while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1);
In questa funzione vorrei avere il controllo dell input da tastiera se inserisco dei numeri che non sono 1 o 0 mi da errore e ripete il ciclo tutto bene,ma se inserisco una lettera il programma va in loop.....

TNX a tutti

Ultima modifica di carugo : 01-09-2014 alle 16:21.
carugo è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2014, 17:44   #2
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
riporta un esempio completo, incluso il main e un esempio di input per la tua funzione .
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 01-09-2014, 18:30   #3
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Tempo fa avevo pensato un po' a come fare, ma non ricordo la soluzione che avevo scelto. A pensarci un po' sbrigativamente, e contando che non tocco il C++ da un po', ho tirato fuori questo:
Codice:
#include <iostream>
#include <string>

using namespace std;

int read_int_from_console()
{
READ:
	string in;
	cin >> in;

	try
	{
		return stoi(in); // stoi converte una string ad int; se non riesce, lancia eccezione
	}
	catch (exception ex)
	{
		cout << "string " << in << " couldn't be cast to int!!" << endl << endl;
		goto READ;
	}
}

int main()
{
	cout << "Enter an integer number." << endl;

	int n = read_int_from_console();
	cout << "You entered: " << n << endl << endl;

	return 0;
}
Premesso che ti serve un compilatore abbastanza aggiornato (gcc 4.7 o più nuovo, mingw 4.7 o più nuovo, Visual Studio 2012 o più nuovo) per poter usare la funzione stoi, l'idea è leggere una stringa e tentare la conversione ad intero, intercettando le eccezioni che farebbero partire il loop.
Problema: se scrivi 12asdas in console, ti viene restituito 12 anzichè dare errore. Soluzione: pensaci tu, questa risposta è solo un suggerimento sulla strada da percorrere
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 02-09-2014, 08:47   #4
Silvia2003
Member
 
Iscritto dal: Dec 2003
Messaggi: 70
Nel caso suggerirei questa variante che evita il 'GOTO'.



int read_int_from_console() {
int ret;
string in;
bool loop = false;
while(!loop) {
cin >> in;
try {
ret = stoi(in);
loop = true;
}
catch (exception ex) {
cerr << "Error!" << endl;
}
}
return ret;
}

Silvia2003 è offline   Rispondi citando il messaggio o parte di esso
Old 02-09-2014, 10:27   #5
carugo
Member
 
Iscritto dal: Oct 2008
Messaggi: 42
Grazie a tutti per le risposte questo è l 'intero codice

Codice:
#include <cstdlib>
#include <iostream>

using namespace std;

const int MAX_FIUMI = 300;
const int MAX_CITTA = 100;

int FiumiCitta [MAX_FIUMI] [MAX_CITTA] ;


void CaricaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA],
                     int n_fiumi, int n_citta)
{
                  
               
  for (int fiumi=0; fiumi<n_fiumi; fiumi++)
    for (int citta=0; citta<n_citta; citta++)
    {    
      do 
        {  
          cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<<
                       " bagna la citta " <<citta +1 << " ,0 se non la bagna ";
          cin >>FiumiCitta [fiumi] [citta]; cout <<endl;
            if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1)
            
               cout  <<" Errore inserire 1 o 0" <<endl;
                
          }
            while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1);
         
     }
     
}

void StampaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA],
                     int n_fiumi, int n_citta)
{
  for (int fiumi=0; fiumi<n_fiumi; fiumi++)
    {
      cout << endl << "Situazione per il fiume" <<fiumi +1 <<": ";
      
      for (int citta=0; citta<n_citta; citta++)
      cout <<FiumiCitta [fiumi] [citta];
     
     
    }
     
}

void CaricaPerCitta (int FiumiCitta [MAX_FIUMI] [MAX_CITTA],
                     int n_fiumi, int n_citta)
{
  for (int citta=0; citta<n_citta; citta++)
    for (int fiumi=0; fiumi<n_fiumi; fiumi++)
    {
        cout <<endl <<" Inserire 1 se la citta " <<citta +1<<
              " e' bagnata dal fiume " <<citta +1 << " ,0 se non e' bagnata ";
        cin >>FiumiCitta [fiumi] [citta];
     }
     
}

int main(int argc, char *argv[])
{
      CaricaPerFiume (FiumiCitta,3,2);
    //CaricaPerCitta (FiumiCitta,3,2);
    //StampaPerFiume (FiumiCitta,3,2);
    
    cout <<endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
da neofita pensavo che il seguente codice
Codice:
do 
        {  
          cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<<
                       " bagna la citta " <<citta +1 << " ,0 se non la bagna ";
          cin >>FiumiCitta [fiumi] [citta]; cout <<endl;
            if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1)
            
               cout  <<" Errore inserire 1 o 0" <<endl;
                
          }
            while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1);
avrebbe risolto il problema anche con simboli ,lettere......proverò vostre soluzioni

TNX A TUTTI

Ultima modifica di carugo : 02-09-2014 alle 10:45.
carugo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Iniziati i lavori al pad di Bajkonur per...
Netflix risponde alle critiche ricevute ...
I migliori sconti Amazon aggiornati sono...
Dimentica gli SMS: Telegram introduce le...
ASUS ROG Xbox Ally a 499€ su Amazon: la ...
Ma lo avete visto? Ring Intercom Audio n...
I videogiochi con la migliore grafica de...
Roscosmos: rinviato il lancio del satell...
S.T.A.L.K.E.R. 2: Heart of Chornobyl, da...
Le azioni Microsoft crollano del 7% per ...
I 5 portatili tuttofare più scont...
Parola dell'anno 2025, il Merriam-Webste...
Snowflake accelera sull'IA enterprise: a...
Stranger Things 5: Steve e Dustin fanno ...
Ubisoft acquisisce Amazon Games Montreal...
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: 11:54.


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