PDA

View Full Version : [c]problema getchar


barreljoker
26-11-2007, 12:10
ho ustao la funzione cerca ma non sono riuscito a trovare la soluzione al mio problema, stò compilando un programma in c sotto linux(suse), il programma è questo:


while(risp!=0)
{
printf("\n--------ADT Stack------\n");
printf("1 - Inserimento\n"
"2 - Estrazione\n"
"3 - Controllo\n"
"4 - Crea nuova struttura\n"
"0 - Esci\n"
"\nDigitare la scelta... ");
scanf("%d",&risp); //Variabile per la scelta
switch (risp)
{
case 1:
{
printf("\nDigitare l'elemento da inserire...\n");
fflush(stdin);
ele = getchar();
push_stack (&head,ele);
break;
}
}//Chiusura switch


il problema è sulla getchar quando devo acquisire l'elemento da inserire nel campo info, se l'elemento è un intero (%d) il prog si ferma e mi fa inserire l'elemento se è un carattere non mi fa fare nulla e mi esce di nuovo il menu come posso fare? ho provato anche ad usare [scanf("%c",&ele);] ma nulla. aiutatemi grazie

Ziosilvio
27-11-2007, 10:49
Se scanf("%d",&risp) inizia a leggere una stringa di input e si accorge che non rappresenta un intero, rimette a posto sullo standard input l'ultimo carattere letto.
A quel punto, lo switch viene fatto sul valore attuale di risp... sul quale però non abbiamo informazioni, e che, se non è né 1 né 0, fa uscire dallo switch ma non dal while.

Dimenticavo: il comportamento di fflush su uno stream di input non è definito, quindi la chiamata a fflush(stdin) è sbagliata.
Puoi "pulire" lo standard input leggendo tutti i caratteri rimasti, fino al newline inserito con la pressione di Invio:
do {
c = getchar();
} while (c != '\n');

trallallero
27-11-2007, 12:43
un'alternativa è la fgets (odio la scanf)

char s[128];
int x = atoi( fgets(s, 128, stdin) );

barreljoker
29-11-2007, 11:31
questo programma è per la gestione di una pila e di una coda, quindi io nel campo info volevo che la persona che utilizza il programma possa inserire sia numeri interi che caratteri, ho provato come dite voi ma nulla, quando scelgo l'impostazione 1 per inserimento mi da di nuovo il menu e non mi fa inserire il carattere vi metto un esempio della schermata:

--------ADT Stack------
1 - Inserimento
2 - Estrazione
3 - Controllo
4 - Crea nuova struttura
0 - Esci

Digitare la scelta... 1

--------ADT Stack------
1 - Inserimento
2 - Estrazione
3 - Controllo
4 - Crea nuova struttura
0 - Esci

Digitare la scelta...

e fa cosi fino alla fine finquando non metto 0 per uscire.

trallallero
29-11-2007, 11:36
posta tutto il sorgente