[C] Acquisizione testo carattere per carattere

di il
2 risposte

[C] Acquisizione testo carattere per carattere

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?

2 Risposte

  • Re: [C] Acquisizione testo carattere per carattere

    1) il return value di getchar è un int, non un char
    2) il goto si usa in casi eccezionali, usa il while
    3) una possibile soluzione sotto Windows è questa (copio e incollo da vecchio thread), adatta tu il codice in base al tuo OS
    
    #include <conio.h>
    [...]
                printf("Inserire testo. # Per terminare\n");
                do{
    		c = getch();
    		putchar(c);
    		if(c == '\r')
    			putchar('\n');
    	    }while(c != '#');
    [...]
    
  • Re: [C] Acquisizione testo carattere per carattere

    Grazie per la risposta , adesso me la studio
Devi accedere o registrarti per scrivere nel forum
2 risposte