DOMANDA Leggere un carattere

Pubblicità

JDany

Utente Attivo
Messaggi
467
Reazioni
24
Punteggio
46
Salve. Ho trovato un problema che non avevo mai incontrato.

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

typedef struct{
    const char c;
}Char;

int cToi(char);

int main(int argc, char *argv[]){   
    Char a, b;
    int n1, n2;
    printf("%s","Inserisci un numero: ");
    scanf("%c", &a.c);
    n1 = cToi(a.c);
    getchar();                                // Senza questo non mi fa leggere un altro char
    printf("%s","Inserisci un numero: ");
    scanf("%c", &b.c);
    n2 = cToi(b.c);
    printf("Somma: %d", n1+n2);
    return 0;
}

int cToi(char a){
    int b = a;
    return b-48;
}

Come ho scritto nel programma, senza "getchar();" prima della prossima scanf non mi fa leggere da tastiera nulla, termina il programma direttamente.
Perché succede questo? E' la prima volta che incontro un problema del genere.
 
Succede perchè alla prima scanf nel buffer inserisci un carattere più il carattere di invio ('\n'). Quindi alla seconda scanf lui guarda nel buffer e tira fuori in automatico '\n'. Con il getchar() risolvi questo problema.
Altra soluzione sarebbe mettere scanf("\n%c", &b.c); cosi che la scanf legga e scarti il \n e poi legga correttamente il carattere.
 
Succede perchè alla prima scanf nel buffer inserisci un carattere più il carattere di invio ('\n'). Quindi alla seconda scanf lui guarda nel buffer e tira fuori in automatico '\n'. Con il getchar() risolvi questo problema.
Altra soluzione sarebbe mettere scanf("\n%c", &b.c); cosi che la scanf legga e scarti il \n e poi legga correttamente il carattere.

Ah non lo sapevo.
Grazie per questa informazione. :brindiamo:
 
Pubblicità
Pubblicità
Indietro
Top