PDA

View Full Version : [C] problema funzione ricorsiva


D4rkAng3l
21-01-2006, 10:33
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?

#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);
}
}

wisher
21-01-2006, 11:13
ma hai copiato il codice o hai provato a sciverlo tu?
nella funzione stampa c'è un controllo su carattere prima che venga inizializzato.

wisher
21-01-2006, 12:17
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

Ziosilvio
21-01-2006, 13:28
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.

Ziosilvio
21-01-2006, 18:11
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 è:
if ((c=getchar()) != EOF)

wisher
22-01-2006, 18:43
ok, come avevo detto io prima :sofico: