Stampare un quadrato di qualunque carattere

di il
18 risposte

Stampare un quadrato di qualunque carattere

Come mai non ottengo la stampa?

// 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>
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 la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
    int latoUtente;
    scanf( "%d", &latoUtente );
    while( latoUtente != -1 ) {
        printf( "%s", "Si prega di inserire il carattere del quale sarà formato il quadrato pieno:   " );
        char carattere;
        scanf( "%c", &carattere );      
        puts( "" );
        quadrAsterCaratterePieno( latoUtente, carattere );
        printf( "%s", "\nSi prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
        scanf( "%d", &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;
        }
    }
}
Grazie.

18 Risposte

  • Re: Stampare un quadrato di qualunque carattere

    Cosa ottieni a video?
  • Re: Stampare un quadrato di qualunque carattere

    candaluar ha scritto:


    Cosa ottieni a video?
    https://prnt.sc/httbc
  • Re: Stampare un quadrato di qualunque carattere

    JackieJack1207 ha scritto:


    candaluar ha scritto:


    Cosa ottieni a video?
    https://prnt.sc/httbc
    Se digito una lettera dopo, ottengo ciò: https://prnt.sc/httff
    cioè mi legge il lato come carattere e non legge il carattere e poi stampa del carattere acquisito al posto del lato...strano...
  • Re: Stampare un quadrato di qualunque carattere

    Non usare scanf(), usa fgets() e non avrai più questo genere di problemi.

    Una piccola nota: cambia questi
    printf( "%s", "Si prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
    in
    printf( "Si prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
  • Re: Stampare un quadrato di qualunque carattere

    Ho provato con fgets ma mi da una serie di errori... come: argomenti non sufficienti per fgets etc... Non conosco questa funzione....
    Poi io sapevo che per la programmazione sicura in C bisogna usare
    
    printf( "%s", "Si prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
    
    anzi che
    
    printf(  "Si prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
    
    Al massimo
    
    puts( "Si prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
    
    ma il cursore va automaticamente a capo....
  • Re: Stampare un quadrato di qualunque carattere

    Intanto per fgets() ti basta una semplice ricerca con google, ma sostanzialmente questa è:
    fgets(stringa, DIMSTRINGA, stdin);
    se poi ti serve un intero fai
    mioint=atoi(stringa);
    Per quanto riguarda la programmazione sicura:
    Poi io sapevo che per la programmazione sicura in C bisogna usare
    Mi spieghi perchè dici questo?
  • Re: Stampare un quadrato di qualunque carattere

    Perchè è scritto sul libro. Inoltre io le stringhe non le ho ancora affrontate.
    Il mio libro riporta questa soluzione ma ciò dimostra che ho sbagliato qualcosa che non capisco......?!?... https://prnt.sc/htup9
    SOLUZIONE 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( "" );
        }
    }
    
    MIA SOLUZIONE:
    
    // 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 la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
        int latoUtente;        
        char carattere;
        scanf( "%d", &latoUtente );
        while( latoUtente != -1 ) {
            printf( "%s", "Si prega di inserire il carattere del quale sarà formato il quadrato pieno:   " );
            scanf( "%c", &carattere );      
            puts( "" );
            quadrAsterCaratterePieno( latoUtente, carattere );
            printf( "%s", "\nSi prega di inserire la lunghezza del lato del quadrato di asterischi pieno (-1 per terminare):   " );
            scanf( "%d", &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

    Perchè è scritto sul libro.
    Quale libro stai utilizzando? Per favore, dimmi anche dove afferma che bisogna usare printf("%s"...)
    Inoltre io le stringhe non le ho ancora affrontate.
    Come non hai ancora affrontato le stringhe??? E queste qui sotto cosa sono?
    "Questo è un programma che stampa un quadrato pieno di lato a scelta dell'utente formato dal carattere scelto dall'utente.\n"
    "%d"
    Ad ogni modo guarda come viene usata la scanf() nel libro che stai usando
    scanf( "%c%d", &c, &s );
  • Re: Stampare un quadrato di qualunque carattere

    candaluar ha scritto:


    Ad ogni modo guarda come viene usata la scanf() nel libro che stai usando
    scanf( "%c%d", &c, &s );
    Ma non mi riesce lo stesso... Dov'è l'errore secondo voi: qui il codice modificato:
    
    // 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 la lunghezza del lato del quadrato di asterischi pieno ed il carattere dal quale sarà formato (-1 per terminare):   " );
        int latoUtente;        
        char carattere;
        scanf( "%d%c", &latoUtente, &carattere );
        puts( "" );
        quadrAsterCaratterePieno( latoUtente, carattere );
    }
    
    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;
            } 
        }
    }
    
    P.S. uso il Deitel "Il linguaggio C"
  • Re: Stampare un quadrato di qualunque carattere

    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 );
    P.S. uso il Deitel "Il linguaggio C"
    Dove ci sta scritto che bisogna usare printf("%s"...)?
  • Re: Stampare un quadrato di qualunque carattere

    candaluar ha scritto:


    Perchè è scritto sul libro.
    Quale libro stai utilizzando? Per favore, dimmi anche dove afferma che bisogna usare printf("%s"...)
    https://prnt.sc/htv1m
    https://prnt.sc/htv2a

    ok??
  • Re: Stampare un quadrato di qualunque carattere

    Grazie! Molto interessante! Allora ne sai più di me!!!
  • 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 );
    ok, così viene ma non mi spiego perchè devo 1) effettuare scanf del lato e del carattere nella stessa funzione
    2) perchè solo invertendo l'ordine di scanf( "%d%c", &latoUtente, &carattere) funziona, perchè funziona solo con scanf( "%c%d", &carattere, &latoUtente ).
  • Re: Stampare un quadrato di qualunque carattere

    candaluar ha scritto:


    Grazie! Molto interessante! Allora ne sai più di me!!!
    Inoltre: https://prnt.sc/htv6f
    https://prnt.sc/htv79
Devi accedere o registrarti per scrivere nel forum
18 risposte