Sergio ha scritto:Punti di vista. Io invece credo che le prime cose che bisognarebbe imparare a fare sono funzioni per l'input di numeri di vario tipo e funzioni per verificare l'uguaglianza tra numeri in virgola mobile (cose come if (x == 0.0) dovrebbero essere vietate, forbidden, verboten).
E anche che bisognerebbe imparare fin dall'inizio a verificare sempre il valore ritornato dalle funzioni, come si consiglia anche nella seconda pagina che hai linkato.
Vi è un sostanziale problema in tutto ciò: sei costretto a presentare le funzioni di input prima di aver insegnato cosa sia una funzione. E questo perché l'applicazione deve sostanzialmente fornire informazioni all'utente in qualche modo. In un certo senso le problematiche del IO del C sono tra le ragioni per cui molti corsi universitari ora usano il C++ o meglio un C90+iostream
.
Inoltre è difficile insegnare a costruire le funzioni di input senza di fatto saper programmare in C. Insomma scambi un punto di partenza con un punto di arrivo. Di fatto dovresti insegnare il C senza IO e poi insegnare l'IO ma questo è complicato. In questo i linguaggi interpretati hanno grossi vantaggi. L'uso di funzioni semplificate come suggerito nel link che hai messo è probabilmente un buon modo per farlo, ma io non spiegherei la loro implementazione a dei principianti. Inoltre un problema di quella implementazione è che per evitare l'uso dei puntatori (e quindi di quell'& malefico) non c'è modo per sapere se le funzioni hanno fallito. Inoltre forse a quel punto tanto vale usare il C++.
La questione dell'uguaglianza dei float la vedo come piuttosto secondaria, insomma puoi programmare tantissime cose senza aver bisogno di float o double. Quindi lo puoi introdurre anche molto tardi.
P.S.: Nel primo link che ho linkato, comunque, c'era un accenno al fatto che l'uso di fgets+sscanf condivideva alcuni difetti di scanf e che quindi fosse solo parzialmente meglio. Tra l'altro alcuni codici che trovi in giro sono fin troppo legati all'ASCII, invece di usare le funzioni appropriate contenute in ctype.h.