Mi è stato dato il seguente esercizio da svolgere
Scrivere un programma C che, preso in ingresso un carattere, indichi il suo tipo (lettera maiuscola, lettera minuscola, vocale, consonante, numero, …) , il codice ASCII corrispondente e la trasformi in maiuscola se minuscola o viceversa. Inserire nel codice il controllo sull’input dell’utente.
Io l'ho risolto nel seguente modo (funzionante);
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int C ;
// Ho deciso di lavorare con i codici Ascii e quindi considerare C un int
//per comodità visto che mi permettono con un escamotages di calcolo
//di cambiare le lettere da maiuscole a minuscole
// unico neo, non sono riuscito a discriminare in ingresso stringhe superiori ad un carattere,
//o meglio, il programma agisce sul primo carattere digitato, ignorando i successivi
// tuttavia avrei preferito che ad immissione di più caratteri il programma restituisse errore.
printf ("digita un solo carattere \n");
scanf ("%1c", &C);
if ( C>=48 && C <=57 )
printf ("E\' un numero ");
else if ( C >= 97 && C <= 122 && (C == 97 || C == 101 || C== 105 || C == 111 || C== 117))
printf ("E\' una vocale minuscola la lettera corrispondente maiuscola e\' %c \n", C-32);
else if (C >= 97 && C <= 122 && (C != 97, 101, 105, 111, 117))
printf ("E\' una consonante minuscola e la lettera corrispondente maiuscola e\' %c \n", C-32);
else if ( C>=65 && C <=90 && (C == 65 || C == 69 || C== 73 || C == 79 || C== 85))
printf ("E\' una vocale maiuscola e la lettera minuscola corrispondente e\' %c \n", C+32);
else if (C>=65 && C <=90 && (C != 65, 69, 73, 79, 85)) //discrimino le conosnanti maiuscole
printf ("E\' una consonante maiuscola e la lettera minuscola corrispondente e\' %c \n", (char)C+32);
if ( C >= 0 && C <= 255 )
printf ("Il codice Ascii del carattere digitato e\' %d \n", C);
return 0;
La domanda è la seguente:
Posso io, in qualsiasi modo, limitare la lunghezza dell'input in ingresso.
e, se non posso, come credo,
In che modo posso segnalare un valore in ingresso errato (ovvero superiore ad un singolo carattere digitato) ?
Es. con il programma scritto sopra se digito a mi da come risultati A e il codice asci di 97
ma se scrivo ab, mi restituisce gli stessi valori
io vorrei che in caso di scritto ab (o 1r o 34 o TTTTTT insomma in caso venga immesso più di un carattere) il programma mi segnali errore e non prosegua più.. come posso fare? tenete conto che posso utilizzare solo C e non librerie particolarmente esotiche.
Grazie
affranto -.-