|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
[C] Conversione MAIUSCOLO -> minuscolo
Salve, ho provato a convertire da MAIUSCOLO a minuscolo e viceversa un carattere tramite operatori bitwise ma il programma non va, dopo la scelta, non mi fa fare la scanf e sinceramente non capisco perchè
Codice:
/*Algoritmo che converte un carattere da maiuscolo a minuscolo tramite bitwise*/ /*E il contrario*/ #include <stdio.h> int MAtoMIN(char x); void MINtoMA(char y,char *w); main() { int scelta; char x,z; puts("Digita che tipo di conversione vuoi fare"); puts("[0] Da maiuscolo a minuscolo"); puts("[1] Da minuscolo a maiuscolo"); scanf("%d",&scelta); if (scelta==0) { printf("Digita un carattere MAIUSCOLO: "); scanf("%c",&x); z=MAtoMIN(x); printf("Carattere convertito: %d\n\n",z); } else if (scelta==1) { printf("Digita un carattere minuscolo: "); scanf("%c",&x); MINtoMA(x,&z); printf("Carattere convertito: %d\n\n",z); } else puts("Scelta errata"); system("pause"); } int MAtoMIN(char x) { return (x|32); } void MINtoMA(char y,char *w) { *w=(y^32); } ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
In pratica, quando usi il primo scanf e inserisci un numero poi premi INVIO, che è anch'esso un carattere e rimane nel buffer.
Il successivo scanf prende questo INVIO come carattere e quindi procede. Puoi ovviare inserendo fflush(stdin); dopo il primo scanf. Codice:
/*Algoritmo che converte un carattere da maiuscolo a minuscolo tramite bitwise*/ /*E il contrario*/ #include <stdio.h> int MAtoMIN(char x); void MINtoMA(char y,char *w); main() { int scelta; char x,z; puts("Digita che tipo di conversione vuoi fare"); puts("[0] Da maiuscolo a minuscolo"); puts("[1] Da minuscolo a maiuscolo"); scanf("%d",&scelta); fflush(stdin); if (scelta==0) { printf("Digita un carattere MAIUSCOLO: "); scanf("%c",&x); z=MAtoMIN(x); printf("Carattere convertito: %c\n\n",z); } else if (scelta==1) { printf("Digita un carattere minuscolo: "); scanf("%c",&x); MINtoMA(x,&z); printf("Carattere convertito: %c\n\n",z); } else puts("Scelta errata"); system("pause"); } int MAtoMIN(char x) { return (x|32); } void MINtoMA(char y,char *w) { *w=(y^32); } } |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
hai ragione, il programma ora funziona correttamente tnx
![]() |
![]() |
![]() |
![]() |
#4 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Uno, due, tre...
... quarantacinque, quarantasei, quarattasette... ... novantotto, novantanove, CENTO! OK, sono calmo, posso parlare. Il comportamento di fflush su uno stream di input non è definito dallo standard. Se vuoi fare una cosa che sei sicuro che funziona, e c è l'ultimo carattere letto, fai: Codice:
x=c; while (x!='\n') x=getchar(); Imparate a usare getchar ed fgetc.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
quindi fflush(stdin) può anche non funzionare?
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jan 2007
Messaggi: 173
|
non so io uso la scanf perchè è universale, legge tutto cambiando solo 1 lettera
![]() hai altri consigli da darmi? ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:12.