PDA

Visualizza la versione completa : [C] Confronto variabile char con int


Sowel
12-05-2012, 08:25
Ciao a tutti ragazzi, vorrei chiedervi consiglio.
Non riesco a confrontare due elementi, uno char ed uno int, mi spiego meglio:

Vi scrivo le parti del programma interessate:



#include <stdlib.h>

char ch;
int m;

ch=getchar(); //digito 3, per esempio
m= 3;

if(ch == m) //Non confronta...
printf("ok");


Ho provato con getc, getch e getchar, ed confrontando con apici e quant'altro...ma niente.
Come posso risolvere?

oregon
12-05-2012, 10:39
Perché un char è espresso tramite codice ASCII

http://it.wikipedia.org/wiki/ASCII

e il carattere '3' vale 51, ovviamente diverso da 3.

Per confrontarli devi scrivere

if(ch == '0'+m)

Who am I
12-05-2012, 13:05
Basta aggiungere 48, il carattere '3' ha valore ASCII 51, controlla la tabella ASCII (http://www.asciitable.com/).

Sowel
12-05-2012, 13:23
Originariamente inviato da oregon
Perché un char è espresso tramite codice ASCII

http://it.wikipedia.org/wiki/ASCII

e il carattere '3' vale 51, ovviamente diverso da 3.

Per confrontarli devi scrivere

if(ch == '0'+m)

Qualcuno mi sopprima..che idiota che sono...
Grazie mille.

Scara95
12-05-2012, 16:07
Attento che funziona solo per le cifre...

Kaamos
12-05-2012, 16:53
Originariamente inviato da Scara95
Attento che funziona solo per le cifre...

Che senso avrebbe paragonare numeri e lettere?

Sowel
12-05-2012, 16:55
Originariamente inviato da Scara95
Attento che funziona solo per le cifre...

Si certo, era quello lo scopo ;)

Scara95
12-05-2012, 17:16
Originariamente inviato da Kaamos
Che senso avrebbe paragonare numeri e lettere?

Nel senso che, ovviamente, non funziona su un inserimento tipo 10, anche perchè vengono letti come 2 caratteri diversi da getchar...

Who am I
12-05-2012, 22:32
Siccome (anche se mi pareva ovvio) non funziona per più cifre, si può facilmente scavalcare la cosa usando le funzioni atoi e sprintf.
Ecco qua due esempi (puramente didattici):



int num;
char c;
char buf1[100];
// input di num e c
sprintf(buf1,"%c",c);
printf("%d\n", atoi(buf1) == num);




int num;
char c;
char buf1[100], buf2[100];
// input di num e c
sprintf(buf1,"%c",c);
sprintf(buf2,"%d",num);
printf("%d\n", strcmp(buf1,buf2));

Sowel
18-05-2012, 09:04
E se volessi fare la stessa operazione con un array?

Ho creato un array in cui inserisco una sequenza di lettere ecc...
Se nell'array c'è scritto Reset allora parte un if ecc...

ossia:

if(array==Reset)
.....

come confronto un'intero vettore?

Loading