Allora, ricopio paro paro un esercizio già completato dal libro su cui sto studiando il C.
L'esercizio chiede di scrivere un programma che legga tre numeri interi positivi da terminale che rappresentino l'orario di partenza ( in
ore, minuti, secondi) di un volo. Poi deve leggere un quarto intero da terminale, che rappresenti (in secondi) la durata del volo. Il
programma deve calcolare l'orario di arrivo.
Il libro propone questo:
#include <stdio.h>
int main()
{
long unsigned int Ore, Minuti, Secondi, TempoDiVolo;
printf("%s\n", "Orario di partenza (hh, mm, ss)?");
scanf("%ld%ld%ld", &Ore, &Minuti, &Secondi);
printf("%s", "Tempo di volo (in sec.)?");
scanf("%ld", &TempoDiVolo);
Secondi = Secondi + TempoDiVolo;
Minuti = Minuti + Secondi / 60;
Secondi = Secondi % 60;
Ore = Ore + Minuti / 60;
Minuti = Minuti % 60;
Ore = Ore % 24;
printf("%s", "Arrivo previsto alle (hh, mm, ss): ");
printf("%ld%c%ld%c%ld\n", Ore, ':', Minuti, ':', Secondi);
return 0;
}
Quando lo eseguo sul terminale, mi viene chiesto da input l'orario di partenza (hh, mm, ss), allora scrivo che il mio volo è tipo alle 9:15
(9:15:0, e premo Invio), e da lì mi stampa tutti gli altri printf() nel programma senza chiedermi altri input..
Questo messaggio sarà lungo, scusate, ma ho già cercato soluzioni, ho guardato altri argomenti su più forum, e quello che dicono più spesso è di lasciar proprio perdere la scanf(), e di provare a usare fgets(), perchè uno dei problemi di scanf() è che quando premi INVIO dopo aver digitato un carattere, vengono valutati sia il carattere immesso sia INVIO, che viene messo "in coda" (cioè pronto da leggere come primo carattere d'ingresso per il prossimo scanf), quindi non avresti tempo di digitare altro, poiché c'é già INVIO in coda.
Ma allora, scusate, ma com'è che invece quest'altro programma mi funziona liscio come l'olio?
#include <stdio.h>
int main()
{
int a;
printf("Digita una cifra: ");
scanf("%d", &a);
printf("Hai digitato: %d\n", a);
printf("Digitane un'altra: ");
scanf("%d", &a);
printf("Hai digitato: %d\n", a);
printf("Digitane ancora una: ");
scanf("%d", &a);
printf("Ora hai digitato: %d\n", a);
return 0;
}
Qua mi chiede diligentemente ogni cosa! Perché qua tutta la manfrina dell' "INVIO in coda" non mi succede? Non so che pensare, se sospettare che il libro scrive gli esercizi male, o se il mio compilatore è "rotto" (uso gcc e il Notepad, compilo direttamente sul terminale, per ora non uso IDE),
l'unica cosa per cui ci sformo davvero è che non posso nemmeno imparare se mi vengono insegnate male proprio le basi!
Ma posso seguire tutto paro paro al libro, convinto di seguire un Testo Sacro senza errori e poi mi trovo col file .exe lunatico??
Vi prego, datemi una mano perché ho disinstallato e reinstallato diversi IDE e pure il MinGW, convinto che avessero combinato loro qualcosa alle variabili d'ambiente o non so che... Non ci sto capendo niente
Grazie in anticipo!