Backspace visibili

di il
8 risposte

Backspace visibili

Ciao a tutti sto facendo questo esercizio:
Si scriva un programma i cui dati in uscita replichino i dati in ingresso, sostituendo i caratteri di tabulazione con \t, ogni backspace con \b e ogni barra inversa con \\, così da rendere perfettamente visibili le tabulazioni e le cancellazioni.

void main()
{
    int c;
    while ((c = getchar()) != EOF)
    {
        if (c == '\t') printf("\\t");
        else if (c == '\b') printf("\\b");
        else if (c == '\'') printf("\\");
        else putchar(c);
    }
}
Riesco a visualizzare \t ma non \b ..., qualcuno sa perchè?
Ho problemi anche con la barra inversa...

8 Risposte

  • Re: Backspace visibili

    La funzione getchar è "buffered" ovvero opera internamente su un proprio buffer e solo alla fine restituisce i caratteri del buffer uno alla volta.
    Il carattere backspace viene elaborato internamente e non restituito, quindi non puoi usare la getchar per questo esercizio.

    Devi usare una funzione non standard che restituisce i caratteri subito senza utilizzare buffer, come la _getch()

    Puoi scrivere (utilizzando il tasto Return per terminare)
    
    #include <conio.h>
    
    int main() {
    	int c;
    	while ((c = _getch()) != '\n') 
    		switch(c)
    		{
    		case '\t':
    			printf("\\t");
    			break;
    		case '\b':
    			printf("\\b");
    			break;
    		case '\\':
    			printf("\\\\");
    			break;
    		default:
    			putchar(c);
    		}
    }
    
  • Re: Backspace visibili

    Ok grazie, ma visto che hai usato printf non devi include anche la libreira stdio.h?
  • Re: Backspace visibili

    Per me è scontato ...

    Attento si include un file header non una libreria. Il file stdio.h NON è una libreria. Questo fa parte delle basi ...
  • Re: Backspace visibili

    Ok, invece se metto EOF al posto di '\n' funziona lo stesso. Cosa cambia?
  • Re: Backspace visibili

    Solo che è più comodo il '\n' per terminare il programma secondo me ... ma non cade il mondo
  • Re: Backspace visibili

    Ok, poi un' altra cosa, perchè hai indicato la barra inversa così '\\' ? A me è venuto spontaneo scrivere '\'
    anche nel caso di printf("\\\\"), perchè quattro barre e non 2?
  • Re: Backspace visibili

    Non hai studiato le "sequenze di escape in C". Ti ho detto che le basi (la teoria) è importante, altrimenti non si possono comprendere né esercizi né soluzioni ...
  • Re: Backspace visibili

    Ah le sequenze di escape sono lettere precedute dalla barra \. La barra inversa è \\
    Ora ho capito perchè
Devi accedere o registrarti per scrivere nel forum
8 risposte