Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
È un problema del C che non permette di ritornare più valori contemporaneamente.
Dove ha senso si usa una struttura allocata dinamicamente e si ritorna quella, altrimenti si aggiungono degli argomenti alla funzione per poter salvare più risultati. Ovviamente devono essere puntatori e vanno dereferenziati, quindi c'è in più il rischio che per sbaglio venga passato NULL.
In aggiunta questo di solito si ritorna anche qualcosa tipo un bool o una enum che indica il successo dell'operazione.
Conoscevo queste problematiche.
Tempo fa mi ero creato funzioni che avevano come parametri anche gli output e come return un enum che in base al numero indicasse se c'era un errore e il tipo di errore.
(-1 input=NULL ; 0 Tutto ok; 1 Funzione fallita)
La domanda era più per un fatto stilistico/buona programmazione (a parità di possibilità d'uso)
tra le due forme, quale si prediligge?
MYRETURN func(In,Output)
o
output func(In)
Io a pelle preferirei la 1°, in questo modo con un semplice if(func) posso testarne l'esito
e non devo ricordarmi tutti i possibili valori d'uscita. Ma vedo che le funzioni dello stardard prediliggono tutte la 2° forma in generale
Ciao intanto dico subito che non ho letto tutto quindi non se la mia risposta sia attinente alla domanda o se hai gia trovato la risposta; fatta la premessa ti direi: se devi verificare l'input carattere per carattere perché non usare direttamente un keyevent? cosi ti risparmi molto lavoro, ad ogni tasto che viene premuto controlli se sia valido o meno, cosi poi anche decidere di non permettere all'user di inserire certi carattere.
è sono fuori allenamento con c++ quindi non ti garantisco che il codice che ti scrivero in seguito funzioni perfettamente ora non riesco a provarla:
Codice sorgente - presumibilmente C++
char GetInput()
{
HANDLE input=GetStdHandle(STD_INPUT_HANDLE);
LPDWORD length ;
INPUT_RECORD record ;
char ToReturn ;
while(record.Event.KeyEvent.bKeyDown)
{
ReadConsoleInput(input,&record,1,length);
ToReturn= record.Event.KeyEvent.uChar.AsciiChar;
}
return ToReturn ;
}
//now whenever testing the function:
int main()
{
if(GetInput()=='il tuo carattere')
cout<<"Sono un mostro ahahahahaha LOL";
elsecout<<"Riprova sarai piu fortunato :pat:";
cin.get();
return 0 ;
}
NB:"ricorda settare le variabili e le cazzate che ho scritto "
Ultima modifica effettuata da lumo il 18/07/2017 alle 17:00
Ciao intanto dico subito che non ho letto tutto quindi non se la mia risposta sia attinente alla domanda o se hai gia trovato la risposta; fatta la premessa ti direi: se devi verificare l'input carattere per carattere perché non usare direttamente un keyevent? cosi ti risparmi molto lavoro, ad ogni tasto che viene premuto controlli se sia valido o meno, cosi poi anche decidere di non permettere all'user di inserire certi carattere.
è sono fuori allenamento con c++ quindi non ti garantisco che il codice che ti scrivero in seguito funzioni perfettamente ora non riesco a provarla:
Codice sorgente - presumibilmente C++
char GetInput()
{
HANDLE input=GetStdHandle(STD_INPUT_HANDLE);
LPDWORD length ;
INPUT_RECORD record ;
char ToReturn ;
while(record.Event.KeyEvent.bKeyDown)
{
ReadConsoleInput(input,&record,1,length);
ToReturn= record.Event.KeyEvent.uChar.AsciiChar;
}
return ToReturn ;
}
//now whenever testing the function:
int main()
{
if(GetInput()=='il tuo carattere')
cout<<"Sono un mostro ahahahahaha LOL";
elsecout<<"Riprova sarai piu fortunato :pat:";
cin.get();
return 0 ;
}
NB:"ricorda settare le variabili e le cazzate che ho scritto "
Testo quotato
Postato originariamente da soury:
Ciao intanto dico subito che non ho letto tutto quindi non se la mia risposta sia attinente alla domanda o se hai gia trovato la risposta; fatta la premessa ti direi: se devi verificare l'input carattere per carattere perché non usare direttamente un keyevent? cosi ti risparmi molto lavoro, ad ogni tasto che viene premuto controlli se sia valido o meno, cosi poi anche decidere di non permettere all'user di inserire certi carattere.
è sono fuori allenamento con c++ quindi non ti garantisco che il codice che ti scrivero in seguito funzioni perfettamente ora non riesco a provarla:
Codice sorgente - presumibilmente C++
char GetInput()
{
HANDLE input=GetStdHandle(STD_INPUT_HANDLE);
LPDWORD length ;
INPUT_RECORD record ;
char ToReturn ;
while(record.Event.KeyEvent.bKeyDown)
{
ReadConsoleInput(input,&record,1,length);
ToReturn= record.Event.KeyEvent.uChar.AsciiChar;
}
return ToReturn ;
}
//now whenever testing the function:
int main()
{
if(GetInput()=='il tuo carattere')
cout<<"Sono un mostro ahahahahaha LOL";
elsecout<<"Riprova sarai piu fortunato :pat:";
cin.get();
return 0 ;
}
NB:"ricorda settare le variabili e le cazzate che ho scritto "
Come prima cosa: grazie dell'intervento.
Il mio scopo non è verificare carattere per carattere. Ma piuttosto, verificare che l'input sia corretto, ad esempio voglio una lettera tra S e N, o un intero tra 0 e 1 Per farlo ho scelto di verificare carattere per carattere e non l'insieme dell'input. Comunque la soluzione era per il C e non C++