|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
problema con switch e ricorsione
Codice:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char risposta;
printf("Vuoi giocare?premi r per ricominicare e per terminare (r/e):");
scanf("%c",&risposta);
switch (risposta)
{
case 'r': {printf("ricomincia");
main();
break;}
case 'e': {printf("esci \n");
break;}
default: {printf("ERROR\n");
main();
break; }
}
system("pause");
return(0);
}
il problema e che non funziona correttamente se premo r lo esegue poi se ripremo r fa un giro a vuoto ed esce scritto ERROR e ricomincia poi mi da tre volte premere un tasto per continuare mi date una mano? Ultima modifica di *MATRIX* : 25-10-2005 alle 21:44. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
nei programmi ricorsivi si "definiscono" due fasi, una di PUSH ed una di POP che corrispondono a ciò che succede durante una chiamata ricorsiva...
Esempio (molto alla buona): Codice:
int pippo()
{
eseguire ancora pippo?
se si
pippo()
se no
...
fine se
stampa a video "ciao"
}
non so se mi sono spiegato...cmq è per questo motivo che ti stampa "premere un tasto" 3 volte...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Quote:
Siccome sono un pò arruginito col C, prendi questo che ti ho detto con le tenaglie |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
vi ringrazio per le risposte
ma non riesco a risolvere HELP |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
Codice:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char risposta;
printf("Vuoi giocare?premi r per ricominicare e per terminare (r/e):");
scanf("%c",&risposta);
switch (risposta)
{
case 'r': {printf("ricomincia\n");
break;}
case 'e': {printf("esci \n");
system("pause");
return(0);
break;}
default: {printf("ERROR\n");
break; }
}
main();
}
MA continua a dare l'altro problema se premo r fa un ciclo a vuoto scrivendo Error e poi mi rifà la domanda |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2005
Città: Cagliari
Messaggi: 54
|
prova ad usare fflush(stdin);
lo metti prima dello scanf,e anche dopo,oppure forse basta solo dopo.... Serve per ripulire il buffer di lettura.
__________________
Sapere di sapere quello che si sa e sapere di non sapere quello che non si sa: ecco il vero sapere... Confucio. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Ecco risolti i tuoi problemi...
Codice:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c;
printf("\nVuoi giocare? \nPremi 'r' per ricominicare ed 'e' per terminare (r/e): ");
fflush(stdin);
scanf("%c",&c);
switch (c)
{
case 'r': {
printf("ricomincia\n");
main();
break;
}
case 'e': {
printf("esci\n");
system("pause");
break;
}
default: {
printf("ERROR\n");
main();
break;
}
}
}
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#8 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Invece di usare:
Codice:
char risposta;
scanf("%c",&risposta");
Codice:
int risposta;
risposta = getchar();
while (getchar() != '\n')
;
P.S.: Per la centesima volta: il comportamento di fflush su stream di input è indefinito, ragion per cui fflush(stdin) non è standard e non è portabile.
__________________
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 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
quel menù mi è servito anche per un programma più lungo chiamando delle funzioni invece del printf vi ringrazio ancora |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:58.



















