#include /* Legge una sequenza di interi da standard input terminante con un carattere non convertibile in intero oppure EOF e la stampa gli interi in ordine inverso */ void printInv(){ int r,n; r = scanf("%d", &n); if(r == 1){// e' stato letto un intero n printInv(); // ricorsivamente stampo il resto della squenza printf("%d ", n); } } int main(){ printInv(); putchar('\n'); return 0; } /* DIMOSTRAZIONE DI CORRETTEZZA ============================ Per induzione sulla lunghezza della sequenza su standard input n1, ..., nk (k>=0) dove e' il carattere di fine della sequenza (carattere ASCII oppure "enf-of-file"). CASO BASE (k=0) ============== Se la sequenza e' vuota (non contiene interi, ma solo il carattere ) la funzione e' corretta. Infatti, dopo r = scanf("%d", &n); r vale 0 se e' un carattere ASCII oppure EOF se e' l'"end-of-file". In entrambi i casi, la funzione non stampa nulla. PASSO INDUTTIVO (k>0) ==================== Supponiamo che la sequenza contenga k>0 interi n1, ..., nk Con r = scanf("%d", &n); viene letto il primo intero n1 e assegnato a n, inoltre r vale 1. La sequenza rimasta su standard input e' n2, ..., nk (oppure: senza alcun intero ) Poiche' tale sequenza contiene (k-1)