Salve a tutti.
Per esercizio devo scrivere un programma che acquisisca un testo (carattere per carattere) e lo stampi a video spezzando le linee di testo a 50 caratteri.
Dopo 30 linee di testo deve comparire un menú che chiede all'utente se vuole visualizzare un'altra schermata di 30 linee o se vuole uscire dal programma.
Questo é il mio tentativo:
// Semplice versione del programma more che
// divide un testo in linee di 50 caratteri e
// in schermate di 30 linee
#include <stdio.h>
int main(void)
{
/* conta_linee = numero di linee stampate
* limite linee = linee da stampare per schermata
* conta_lettere = numero di caratteri per linea
* limite_lettere = massimo numero di caratteri per linea
* c = carattere da processare
* scelta = scelta dell'utente nel menu
*/
int conta_linee = 1, limite_linee = 30, conta_lettere = 0, limite_lettere = 50;
char c, scelta;
printf("Enter text:\n");
while ((c = getchar()) != EOF) //termina il ciclo alla fine del testo
{
++conta_lettere;
putchar(c);
if (conta_lettere == limite_lettere) // se ha scritto 50 caratteri
{ // vai a capo
c = '\n';
putchar(c);
}
if (c == '\n')
{
++conta_linee; //se vai a capo segna una nuova
conta_lettere = 0; // linea e azzera il conteggio
} // dei caratteri per linea
if (conta_linee == limite_linee) //se hai scritto 50 linee
{ //entra nel menu
menu:
printf("\n\n *** Digit 'n' to print next screen, 'q' to quit: ");
scelta = getchar();
switch (scelta)
{
case ('n'): //azzera tutto e stampa
conta_linee = 0; //un'altra schermata
conta_lettere = 0;
break;
case ('q'): //esci dal programma
return 0;
default:
printf("\nError"); //ripeti la scelta
goto menu;
}
}
}
return 0;
}
Il codice compila ma, arrivati al menú, l'utente non puó immettere caratteri di scelta, perché viene utilizzato l'ultimo carattere letto dall'input iniziale.
Suggerimenti?