|
|||||||
|
|
|
![]() |
|
|
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: 16213
|
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: 11:17.




















