11/07/17 19:11
Mikelius
Buonasera, come spesso accade, La maggior parte dei programmi richiedono degli input, spesso questi input posso essere dei semplici Si - No, intero positivo minore di 10 o complessi tipo equazioni.
Ho scritto delle funzioni, in teoria generiche, che hanno la funzione di verificare
se il dato immesso sia più o meno lecito
Nel caso di Si-No verificarli è molto semplice. Posto innanzitutto questa funzione (ne ho una per gli interi positivi <10 sulla stessa falsa riga di questa ed un'altra per verificare un range di interi di grandezza variabile (es. 56-9865)
Posto una alla volta per non fare confusione
func.c
main.c
Pareri? migliorie? meglio che mi do all'ippica XD??
P.S. (ma sono i commenti che rendono il 1° codice non colorato?)
Ho scritto delle funzioni, in teoria generiche, che hanno la funzione di verificare
se il dato immesso sia più o meno lecito
Nel caso di Si-No verificarli è molto semplice. Posto innanzitutto questa funzione (ne ho una per gli interi positivi <10 sulla stessa falsa riga di questa ed un'altra per verificare un range di interi di grandezza variabile (es. 56-9865)
Posto una alla volta per non fare confusione
func.c
#include <stdio.h> #include <ctype.h> /* Verifica che l'immissione da tastiera sia tra 2 possibili caratteri scelti dal chiamante. I caratteri possono essere minuscoli o MAIUSCOLI. Es. [S/N]-[s/n] o [Y/N]-[y/n] */ /* Dato un input da tastiera lo esamino carattere per carattere. Ritengo valido l'input composto SOLO ED ESCLUSIVAMENTE dai caratteri in input vero e falso. Prendo il primo carattere immesso, - se NON E' uno dei caratteri validi finisco la funzione con errore - se LO E' , verifico il 2° . - se è '\n' vuole dire che è stato immesso solo un carattere ed e' valido - altrimenti l'input non è valido. Si lascia al chiamante l'opportunità di ripetere la richiesta del carattere in caso di esito negativo della 1° */ int selecTF( int vero, int falso, unsigned char *carattere ){ int c = 0; //Inizzializzo per sicurezza *carattere = 'Buonasera, come spesso accade, La maggior parte dei programmi richiedono degli input, spesso questi input posso essere dei semplici Si - No, intero positivo minore di 10 o complessi tipo equazioni.
Ho scritto delle funzioni, in teoria generiche, che hanno la funzione di verificare
se il dato immesso sia più o meno lecito
Nel caso di Si-No verificarli è molto semplice. Posto innanzitutto questa funzione (ne ho una per gli interi positivi <10 sulla stessa falsa riga di questa ed un'altra per verificare un range di interi di grandezza variabile (es. 56-9865)
Posto una alla volta per non fare confusione
func.c#include <stdio.h> #include <ctype.h> /* Verifica che l'immissione da tastiera sia tra 2 possibili caratteri scelti dal chiamante. I caratteri possono essere minuscoli o MAIUSCOLI. Es. [S/N]-[s/n] o [Y/N]-[y/n] */ /* Dato un input da tastiera lo esamino carattere per carattere. Ritengo valido l'input composto SOLO ED ESCLUSIVAMENTE dai caratteri in input vero e falso. Prendo il primo carattere immesso, - se NON E' uno dei caratteri validi finisco la funzione con errore - se LO E' , verifico il 2° . - se è '\n' vuole dire che è stato immesso solo un carattere ed e' valido - altrimenti l'input non è valido. Si lascia al chiamante l'opportunità di ripetere la richiesta del carattere in caso di esito negativo della 1° */ int selecTF( int vero, int falso, unsigned char *carattere ){ int c = 0; //Inizzializzo per sicurezza *carattere = '{parsed_message}'; //Inizzializzo per sicurezza // prelevo e testo dal buffer il 1° carattere c = getchar(); if( c == tolower( vero ) || c == toupper( vero ) || c == tolower( falso ) || c == toupper( falso ) ){ // Lo rendo minuscolo per evitare nella funzione chiamante 2 controlli ulteriori // NON ESSENZIALE *carattere =(unsigned char)tolower( c ); // prelevo e testo dal buffer il 2° carattere c = getchar(); if( (c == '\n') ){ // printf( "VALORE CORRETTO\n" ); //utile o no? return 0; } } while( (getchar() != '\n') ); //Svuoto il buffer nel caso di richiesta di nuova immissione return -1; }
main.c#include <stdio.h> int selecTF( int ch1, int ch2, unsigned char *caracter ); int main( int arcv, char *arcg[] ){ int value = 0; unsigned char letter=' ' ; printf( "IMMETTERE [%c/%c] :", 'S', 'N' ); while(selecTF( 's', 'n',&letter )) { printf( "%s\n%s [%c/%c]:", "IL CARATTERE IMMESSO NON E'CORRETTO", "IMMETTERE", 'S', 'N' ); } printf( "IL carattere scelto e' il: %c\n\n", letter ); return 0; }
Pareri? migliorie? meglio che mi do all'ippica XD??
P.S. (ma sono i commenti che rendono il 1° codice non colorato?)'; //Inizzializzo per sicurezza // prelevo e testo dal buffer il 1° carattere c = getchar(); if( c == tolower( vero ) || c == toupper( vero ) || c == tolower( falso ) || c == toupper( falso ) ){ // Lo rendo minuscolo per evitare nella funzione chiamante 2 controlli ulteriori // NON ESSENZIALE *carattere =(unsigned char)tolower( c ); // prelevo e testo dal buffer il 2° carattere c = getchar(); if( (c == '\n') ){ // printf( "VALORE CORRETTO\n" ); //utile o no? return 0; } } while( (getchar() != '\n') ); //Svuoto il buffer nel caso di richiesta di nuova immissione return -1; }
main.c
#include <stdio.h> int selecTF( int ch1, int ch2, unsigned char *caracter ); int main( int arcv, char *arcg[] ){ int value = 0; unsigned char letter=' ' ; printf( "IMMETTERE [%c/%c] :", 'S', 'N' ); while(selecTF( 's', 'n',&letter )) { printf( "%s\n%s [%c/%c]:", "IL CARATTERE IMMESSO NON E'CORRETTO", "IMMETTERE", 'S', 'N' ); } printf( "IL carattere scelto e' il: %c\n\n", letter ); return 0; }
Pareri? migliorie? meglio che mi do all'ippica XD??
P.S. (ma sono i commenti che rendono il 1° codice non colorato?)
Ultima modifica effettuata da Mikelius 11/07/17 19:16
aaa