Stampare un quadrato di qualunque carattere

di il
18 risposte

18 Risposte - Pagina 2

  • Re: Stampare un quadrato di qualunque carattere

    Ok, ci siamo quasi ma c'è ancora questo problema da risolvere...
    Per lo stesso codice, come valutate questi printscreen.
    https://prnt.sc/htvbj
    https://prnt.sc/htvbr
    https://prnt.sc/htvc2


    Da cosa può dipendere??
    
    // Codice sorgente:
    #include <stdio.h>
    void quadrAsterCaratterePieno( int sideVertic, char fillCharacter );
    int main( void ) {
        puts( "Questo è un programma che stampa un quadrato pieno di lato a scelta dell'utente formato dal carattere scelto dall'utente.\n" );
        printf( "%s", "Si prega di inserire il carattere dal quale sarà formato il quadrato e la lunghezza del lato del quadrato pieno (0 -1 per terminare):   " );
        int latoUtente;        
        char carattere;
        scanf( "%c%d", &carattere, &latoUtente );
        while( carattere != 0 && latoUtente != -1 ) {
            puts( "" );
            quadrAsterCaratterePieno( latoUtente, carattere );   
            printf( "%s", "\nSi prega di inserire il carattere dal quale sarà formato il quadrato e la lunghezza del lato del quadrato pieno (0 -1 per terminare):   " );
            scanf( "%c%d", &carattere, &latoUtente );        
        }
    }
    
    void quadrAsterCaratterePieno( int sideVertic, char fillCharacter ) {
        int rigaCounter = 1;
        for( int counterVertic = 1; counterVertic <= sideVertic * sideVertic; ++counterVertic ) {
            printf( "%c ", fillCharacter );
            if( counterVertic == sideVertic * rigaCounter ) {
                puts( "" );
                ++rigaCounter;
            } 
        }
    }
    
  • Re: Stampare un quadrato di qualunque carattere

    candaluar ha scritto:


    Ma scusa, perchè non provi prima come è scritto sul libro?
    int s; // lunghezza del lato
        char c; // carattere di riempimento
        scanf( "%c%d", &c, &s );
    Ho fatto un pò di testa mia ed alla fine ce l'ho fatta, a meno di un problema...
    Il printscreen è questo: https://prnt.sc/hu3yg
    Il codice è questo( dove si vede anche la differenza con la risoluzione dal libro di testo che funziona ma in un ciclo di iterazione non mi è di aiuto...):
    
    // ESERCIZIO 5.20: Stampare un quadrato di un qualunque carattere.
    // Modificate la funzione realizzata nell'esercizio 5.19 per formare il quadrato con qualsiasi carattere contenuto nel parametro di tipo carettere fillCharacter. Così, se side è 5 e fillCharacter è "#", questa funzione deve stampare:
    
    //     # # # # #
    //     # # # # #
    //     # # # # #
    //     # # # # #
    //     # # # # #
    
    // Codice sorgente:
    #include <stdio.h>
    char quadrAsterCaratterePieno( int sideOriz, char fillCharacter );
    int main( void ) {
        puts( "Questo è un programma che stampa un quadrato pieno di lato a scelta dell'utente formato dal carattere scelto dall'utente.\n" );
        printf( "%s", "Si prega di inserire la lunghezza del lato del quadrato pieno:   " );
        int latoUtente;       
        scanf( "%d", &latoUtente );
        while( latoUtente != 0 ) {
            printf( "%s", "Si prega di inserire il carattere dal quale sarà formato il quadrato:  " );
            char carattere = getchar();
            scanf( "%c", &carattere );
            puts( "" );
            quadrAsterCaratterePieno( latoUtente, carattere );     
            printf( "%s", "\nSi prega di inserire la lunghezza del lato del quadrato pieno:   " );
            scanf( "%d", &latoUtente );
        }
    }
    char quadrAsterCaratterePieno( int sideOriz, char fillCharacter ) {
        int rigaCounter = 1;
        for( int counterVertic = 1; counterVertic <= sideOriz * sideOriz; ++counterVertic ) {
            printf( "%c ", fillCharacter );
            if( counterVertic == (sideOriz * rigaCounter) ) {
                puts( "" );
                ++rigaCounter;
            } 
        }
    }
    
    
    
    /*   
    RISPOSTA DEL LIBRO:
    #include <stdio.h>
    void square( int side, char fillCharacter );
    int main( void ) {
        printf( "%s", "Enter a character and the side lenght:  " );
        int s; // lunghezza del lato
        char c; // carattere di riempimento
        scanf( "%c%d", &c, &s );
        puts( "" );
        square( s, c ); // stampa quadrato pieno con carattere specificato
    }
    
    // square stampa quadrato pieno di fillCharacter con il lato specificato
    void square( int side, char fillCharacter ) {
        // ripeti side per il numero di righe
        for( unsigned int loop = 1; loop <= side; ++loop ) {
            for( unsigned int loop2 = 1; loop2 <= side; ++loop2 ) {
                printf( "%c ", fillCharacter );
            }
            puts( "" );
        }
    }
    */
    
    
    Il problema è con i caratteri; à, ò, è, #, etc... con questi caratteri mi da errori negli output... Qui il printscreen: https://prnt.sc/hu404 https://prnt.sc/hu3zx Inoltre il carattere # non lo riesco proprio a mettere in input ( devo premere alt + gr + # ma non scrive nulla. Per $, £, " funziona.
    Grazie
  • Re: Stampare un quadrato di qualunque carattere

    La butto lì senza aver letto il tuo codice: non è che è una questione legata alla localizzazione? Se così fosse potresti superarlo (aggirarlo) con setlocale()?
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    
    int main() {
        setlocale( LC_ALL, "Italian_Italy.1252" );
    
        printf( "%s", "Vai con à, ò, è, #... alè!\n\n" );
        return 0;
    }
    Ps: nota l'uso della versione sicura di printf!
  • Re: Stampare un quadrato di qualunque carattere

    Ho provato il tuo codice copiandolo in un file main.c e compilandolo in Code::Blocks con mingw (non ricordo quale versione di mingw, né di gcc) -- funziona tutto quanto con due piccolezze:

    1) il compilatore si lamenta, con un warning, per il fatto che la funzione quadrAsterCaratterePieno() dovrebbe restituire un char e invece arriva alla fine senza restituire un bel niente (manca il return). Si risolve facilmente cambiando il ritorno da char a void, tanto non richiedi nessun valore di ritorno alla funzione.

    2) Nella visualizzazione delle stringhe "di dialogo" hai inserito dei caratteri accentati che, con la localizzazione standard "C", vengono interpretati malamente dando caratteri strani in console. Si risolve cambiando "è" cone "e'" e "à" con "a'".

    Ho anche provato a modificare la localizzazione ma, per qualche ragione, mentre vanno a posto le stringhe "di dialogo", si scombina completamente la visualizzazione dei caratteri immessi per creare il quadrato, se vengono immessi caratteri con valore ASCII maggiore di 127. Va' a capire...
Devi accedere o registrarti per scrivere nel forum
18 risposte