PDA

View Full Version : [C] Isdigit & Isalpha


ugo86
03-03-2007, 00:08
Ciao ragazzi, innanzitutto grazie mille per il vostro aiuto continuo! :D

In poche parole ho queste due semplicissime funzioni ma non riesco ad utilizzarle!

Il mio programma riceve un intero e lo controlla.

Deve essere compreso tra 1 e 3... quindi voglio distinguere se è un numero, se è una lettera... o se non è nè l'uno e nè l'altro (ad esempio un punto).

Il mio programma è il seguente:

#include <stdio.h>
#include <ctype.h>
main(){
int a, control=0;
while(control==0){
printf("Inserisci il numero ");
scanf("%d", &a); //preleva l'intero

if (isdigit(a)!=0){ //se è un numero
if( a>=1 && a<=3 ){
printf("scelta corretta\n\n");
control = 1;
break;
}
else
printf("Numero non corretto\n\n");
} //fine if isdigit

if (isalpha(a)!=0)
printf("e' una lettera\n\n");

if(isalnum(a)==0)
printf("Non e' ne' una lettera e nemmeno un numero!!!\n\n");
} //fine while
printf("Fine del programma\n\n");
system("pause");
} //fine main

C'è qualcosa che non va... non funziona! Ma non sarà che ste funzioni isdigit, isalpha e isalnum ACCETTANO SOLO IL CODICE ASCII?? Come faccio a usarle se ho una variabile di tipo intera???

vizzz
03-03-2007, 01:01
int isdigit( int ch );

passando un char

char a;
scanf("%c", &a);
isdigit(a)

se a è un carattere da '0' a '9' isdigit ritorna un valore diverso da 0
idem come sopra per isalpha

ugo86
03-03-2007, 09:37
Grazie vizz! Il problema della funzione è risolto... però è rimasto il problema del ciclo! Me ne fa più di uno... c'è ancora qualcosa che non va!

Ti mando il programma:

main(){
char a, control=0;
while(control==0){
printf("Inserisci il numero ");
scanf("%c", &a); //preleva l'intero

if (isdigit(a)!=0){ //se è un numero
if( a>=1 && a<=3 ){
printf("scelta corretta\n\n");
control = 1;
break;
}
else
printf("Numero non corretto\n\n");
} //fine if isdigit

if (isalpha(a)!=0)
printf("e' una lettera\n\n");

if(isalnum(a)==0)
printf("Non e' ne' una lettera e nemmeno un numero!!!\n\n");
} //fine while
printf("Fine del programma\n\n");
system("pause");
} //fine main

vizzz
03-03-2007, 09:58
if( a>=1 && a<=3 ) non è possibile farlo confrontando un char.
qui dovresti convertire con atoi il char in un intero e poi confrontarlo.

ugo86
04-03-2007, 11:44
A regà.... in finale non esiste modo per capire che tipo di lettera si è inserita in un intero???

andbin
04-03-2007, 12:04
A regà.... in finale non esiste modo per capire che tipo di lettera si è inserita in un intero???Già questa frase non ha molto senso....

char c;

scanf ("%c", &c);

if (isdigit (c))
{
if (c >= '1' && c <= '3')
printf ("Numero corretto\n");
else
printf ("Numero non corretto\n");
}
else if (isalpha (c))
printf ("Lettera\n");
else
printf ("Altro carattere\n");Cioè ... quale è il problema??

ugo86
04-03-2007, 12:30
Grande and! Fortuna che ci sei te, SEI UN MAGO!!!
Mi era sfuggito che i numeri bisognava metterli tra le virgolette!

hehehehehe, grazie mille caro! :D