|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[C] problema funzione ricorsiva
Che dovrebbe fare questo programma? quando provo a premere CTRL Z non succede nulla (sono su win)...da quello che mi ricordo a lezione dovrebbe stampare la scrita invertita...possibile?
Codice:
#include <stdio.h> #include <stdlib.h> void stampa(void); // Non riceve alcun parametro e non restituisce nulla int main(){ stampa(); printf("\n"); system("PAUSE"); return 0; } void stampa(void){ char carattere; // Se il valore immesso è diverso dall'END OF FILE if((carattere != getchar()) != EOF){ stampa(); // richiama ricorsivamente la funzione stampa printf("%c",carattere); } } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
ma hai copiato il codice o hai provato a sciverlo tu?
nella funzione stampa c'è un controllo su carattere prima che venga inizializzato.
__________________
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
se deve stampare all'inverso basta che tu sostituisca il != nel confronto con = (assegnamento).
inoltre dato che usi getch penso sia più comodo fare il confronto con '\n' che con EOF (cmq dovrebbe andare lo stesso, io nn mi ricordo la combinazione per fare EOF e quindi nn ho potuto provare) ciao
__________________
|
![]() |
![]() |
![]() |
#4 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Da quanto ho capito, dovrebbe scrivere al contrario la sequenza letta.
Però ci sono parecchie cose che non mi convincono: usare printf anziché putchar per stampare un singolo carattere, fare il controllo con EOF anziché col newline, eccetera. A proposito: EOF deve essere un valore diverso da qualunque carattere stampabile, quindi c deve essere un int, non un char.
__________________
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 |
![]() |
![]() |
![]() |
#5 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Aggiornamento: il comportamento del programma è quello che pensavo.
O meglio, lo sarebbe se nella funzione stampa la condizione dell'if fosse scritta correttamente. Ma non lo è, perché la condizione dell'if è sbagliata. Infatti, la variabile "carattere" (ma perché un nome così lungo? non bastava "c" da solo?) dovrebbe essere inizializzata dalla chiamata a getchar, ma non succede perché c'è un "!=" al posto del corretto "=". La versione corretta è: Codice:
if ((c=getchar()) != EOF)
__________________
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 Ultima modifica di Ziosilvio : 21-01-2006 alle 18:13. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
ok, come avevo detto io prima
![]()
__________________
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:06.