PDA

Visualizza la versione completa : [C] Inserimento caratteri


kk.87
20-12-2008, 00:25
Salve a tutti, non riesco a capire una stranezza e spero che qualcuno riesca a farmi capire. Perch se scrivo il codice in questa maniera mi fa inserire da tastiera solo il valore di "lettera" e per il resto il programma termina correttamente ma senza farmi inserire il valore a "lettera2"?


int main (){
char lettera,lettera2;
printf("aggiungi lettera:");
scanf("%c", &lettera);
printf("aggiungi lettera2:");
scanf("%c", &lettera2);
printf("lettera: %c\n lettera2: %c\n", lettera,lettera2);
system("pause");
}


MENTRE se apporto una piccola modifica al codice, elminando il printf tra i due scanf, il programma gira perfettamente.


int main (){
char lettera,lettera2;

printf("aggiungi lettera e lettera2:");
scanf("%c", &lettera);
scanf("%c", &lettera2);
printf("lettera: %c\n lettera2: %c\n", lettera,lettera2);
system("pause");
}


IO NON RIESCO A CAPIRE LA DIFFERENZA,POTETE AIUTARMI? GRAZIE

menphisx
20-12-2008, 01:08
Devi fare una fflush(stdin) dopo ogni scanf, oppure:


while(!getchar());


P.S.: usa i tag CODE, indenta e metti il return 0.

YuYevon
20-12-2008, 10:05
Per risolvere il problema potresti anche aggiungere uno speciale carattere alla stringa di formato della scanf(), ossia "%*c".

La forma generale nel tuo caso sarebbe:

scanf("%c%*c", &nome_variabile);

in sostanza %*c significa "leggi il carattere e scartalo", ovviamente in questo caso il carattere da scartare quello di new-line che viene memorizzato nel buffer di input quando premi INVIO, dato che quello che ti causa problemi.

Potresti anche usare "%c\n", con cui se non ricordo male la scanf dovrebbe leggere fino al carattere di new-line e ignorarlo, in maniera tale da non compromettere il funzionamento delle scanf() successive.

Ehm...non so a voi ma a me system("PAUSE"); da fastidio allo sguardo :D

qotsa
20-12-2008, 10:26
bho

oregon
20-12-2008, 10:27
Originariamente inviato da qotsa
bho

Questo tuo commento era essenziale per il thread ... :madai!?:

alka
20-12-2008, 15:07
Originariamente inviato da qotsa
bho
Ci tengo a precisare che, quando si legge una discussione, NON assolutamente necessario rispondere per forza, a maggior ragione se non si ha nulla da dire a riguardo.

menphisx
20-12-2008, 23:23
Originariamente inviato da alka
Ci tengo a precisare che, quando si legge una discussione, NON assolutamente necessario rispondere per forza, a maggior ragione se non si ha nulla da dire a riguardo.

Magari voleva solo riceve gli aggiornamenti sul thread, nel qual caso esiste il link "Ricevi aggiornamenti sul thread" in basso.
Nel caso fosse una risposta, beh potevi risparmiartela :stordita:

Loading