|
|
|
|
Strumenti |
25-10-2005, 20:31 | #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 20:44. |
25-10-2005, 21:10 | #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 |
25-10-2005, 21:26 | #3 | |
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1265
|
Quote:
Siccome sono un pò arruginito col C, prendi questo che ti ho detto con le tenaglie anzi mi scuso se ti sto fuorviando ma vorrei cogliere l'occasione per fare un ripasso. |
|
25-10-2005, 21:30 | #4 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
vi ringrazio per le risposte
ma non riesco a risolvere HELP |
25-10-2005, 21:56 | #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 |
26-10-2005, 06:36 | #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. |
26-10-2005, 07:14 | #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 |
26-10-2005, 08:43 | #8 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16115
|
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" Chi scherza col fuoco si brucia. Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 |
26-10-2005, 18:47 | #9 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 439
|
grazie dei consigli ora va tutto bene
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: 06:06.