PDA

Visualizza la versione completa : [C] Dubbio su if() e scanf()


Baenor
10-12-2010, 14:11
Salve a tutti mi sto da poco inserendo a programmare col linguaggio C.
Adesso mi stavo esercitando facendo un programma che convertisse una lettera minuscola in una lettera maiuscola utilizzando a scelta i due rispettivi metodi: 1) tramite la funzione toupper() e 2) tramite un calcolo dei valori ASCII:

Inizialmente avevo scritto una cosa simile:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int scelta;
char min;
char max;
int scelta2;
printf("Benvenuto!\n questo programma effettua il cambio da maiuscolo a miniscolo");
printf("Puoi scegliere se utilizzare la funzione toupper o utilizzare un calcolo ASCII");
printf("Digita 0 per la funzione toupper o 1 per la funzione ASCII, digita qualsiasi altra lettera per uscire dal programma");

scanf("%d",&scelta);

while(scelta==0 || scelta==1){
printf("Inserisci la lettera minuscola\n");
scanf("%c",&min);

if(scelta==0){

printf("funzione toupper\n");
max=toupper(min);
printf("Il maiuscolo e'\n%c ",max);
}
else{

max=min+'A'-'a';
printf("Il maiuscolo e'\n%c ",max);

}
scanf("%d",&scelta);
}


system("PAUSE");
return 0;
}


Poi per mi sono accorto che mi saltava totalmente lo SCANF interno al while per la lettera minuscola...non so per quale motivo...e quindi sono stato costretto a mettere lo scanf della lettera minuscola esternamente al ciclo while..
adesso non che mi interessi...per voglio sapere perch internamente al ciclo while lo scanf non mi funziona...esternamente s..

spero che possiate essermi di aiuto e soprattutto che sono stato chiaro!
grazie in anticipo :98:

simo_85
10-12-2010, 14:21
if(scelta == 0 || scelta == 1)
PS: a parte questo rivedi il tuo programma, una minuscola semplicemente pi grande di 32 rispetto a una maiuscola.

Baenor
10-12-2010, 14:25
non ho capito bene il discorso dell'if...potresti spiegarmelo?

per quanto riguarda il discorso della maiuscola ti riferisci a questa istruzione immagino:
max=min+'A'-'a';

che posso opportunamente modificare utilizzando come hai detto tu il numero 32...
ma ci che mi preme capire perch lo scanf funziona fuori e dentro il while no....

ramy89
10-12-2010, 16:35
Scelta non l' hai inizializzato,il ciclo comincia se:


while(scelta==0 || scelta==1)

Cio se scelta uguale a zero o se scelta uguale a 1.
Ma scelta non ha valore,l'hai dichiarato te con:


int scelta;

Prova a dargli il valore 0.
L' if una condizione,eseguo l' istruzione se la condizione dentro l' if verificata.
Il while come l' if ma si ripete finch la condizione risulta vera.

Baenor
10-12-2010, 16:38
scelta non lho inizializzato volutamente in maniera tale che l'utente decide cosa fare..
c' uno scanf di scelta poco prima del while...
ripeto il problema forse non sono stato chiaro..


while(scelta==0 || scelta==1){
printf("Inserisci la lettera minuscola\n");
scanf("%c",&min);


qui il problema...esattamente nello scanf della variabile MIN. Se questo scanf dentro il while...non appena eseguo il programma come se lo ignora e non mi permette di digitare alcuna lettera minuscola costringendomi e farlo fuori dal while...

voglio capire perch mi fa questo problema

ramy89
10-12-2010, 16:44
Ah,ho capito.
E' che devi pulire il buffer di input,ci sono vari metodi.
O scrivi alla fine del ciclo:


while(getchar()!=10);

Oppure a fine ciclo:


fflush(stdin);

Io mi trovo meglio con fflush,ma sicuramente qualcuno ti dir che meglio usare il primo metodo.
Non so dirti perch.

LeleFT
10-12-2010, 17:09
Come indicato nel Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887) il codice va postato all'interno degli appositi tag CODE (e non dei tag COLOR). Ho corretto il tuo primo post.

In futuro, pensaci tu.


Ciao. :ciauz:

Loading