|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Napoli
Messaggi: 319
|
[c]problema getchar
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:
Codice:
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
__________________
iMac 27" 5K" 3,4 GHz Intel Core i5 quad-core, 32 GB 2400 MHz DDR4, HD 1tb Fusion Drive Ultima modifica di barreljoker : 26-11-2007 alle 12:14. Motivo: aggiunta informazioni |
|
|
|
|
|
#2 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
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: Codice:
do {
c = getchar();
} while (c != '\n');
__________________
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 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
un'alternativa è la fgets (odio la scanf)
Codice:
char s[128]; int x = atoi( fgets(s, 128, stdin) );
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2006
Città: Napoli
Messaggi: 319
|
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.
__________________
iMac 27" 5K" 3,4 GHz Intel Core i5 quad-core, 32 GB 2400 MHz DDR4, HD 1tb Fusion Drive |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
posta tutto il sorgente
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:43.



















