Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di spqr
    Registrato dal
    Aug 2002
    Messaggi
    978

    [C] Esercizi da neofita

    Ok, ormai mi conoscete, sono quello che ha iniziato da poco a studiare il C bla bla bla...

    Allora, gli esercizi di pratica che trovo sul Deitel stanno andando bene, avrei solo 2 problemi...

    1.DUBBIO
    ________________________________________________
    /* 5.20 */
    #include <stdio.h>

    void disegno(int, char);

    main(){

    int side, counter;
    char car;


    printf("carattere: "); scanf("%c", &car);
    printf("numero: "); scanf("%d", &side);

    for (counter=1; counter<=side; counter++)
    disegno(side, car);




    system("PAUSE");
    return 0;}

    void disegno(int x, char y) {

    int counter;

    for (counter=1; counter<=x; counter++)
    printf("%c", y);

    printf("\n");

    }

    _________________________________________________

    Perchè se inverto printf("carattere: "); scanf("%c", &car); con printf("numero: "); scanf("%d", &side);
    non funziona?


    2.DISPERAZIONE
    Le funzioni ricorsive sono un incubo...
    Potete consigliarmi materiale sulla rete che spieghino molto chiaramente come funzionano?

    grazie!
    "Guardateli i credenti di tutte le religioni! Chi odiano essi più di ogni altro? Colui che spezza le lor tavole dei valori, il violatore, il corruttore. Ma questi è colui che crea." Nietzsche

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    Re: [C] Esercizi da neofita

    Originariamente inviato da spqr
    Ok, ormai mi conoscete, sono quello che ha iniziato da poco a studiare il C bla bla bla...

    Allora, gli esercizi di pratica che trovo sul Deitel stanno andando bene, avrei solo 2 problemi...

    1.DUBBIO
    ________________________________________________
    /* 5.20 */
    #include <stdio.h>

    void disegno(int, char);

    main(){

    int side, counter;
    char car;


    printf("carattere: "); scanf("%c", &car);
    printf("numero: "); scanf("%d", &side);

    for (counter=1; counter<=side; counter++)
    disegno(side, car);




    system("PAUSE");
    return 0;}

    void disegno(int x, char y) {

    int counter;

    for (counter=1; counter<=x; counter++)
    printf("%c", y);

    printf("\n");

    }

    _________________________________________________

    Perchè se inverto printf("carattere: "); scanf("%c", &car); con printf("numero: "); scanf("%d", &side);
    non funziona?


    2.DISPERAZIONE
    Le funzioni ricorsive sono un incubo...
    Potete consigliarmi materiale sulla rete che spieghino molto chiaramente come funzionano?

    grazie!
    Cosa vuol dire cho non funzione ? Non compila oppure non esegue come dovrebbe ? Perche' non provi a fare delle printf subito dopo le scanf per vedere se le variabili sono state inizializzate a dovere !?

    P.S.: per la ricorsione magari... ti basta andar QUA e digitare "ricorsione"... non e' difficile !

  3. #3
    Utente di HTML.it L'avatar di spqr
    Registrato dal
    Aug 2002
    Messaggi
    978
    Se prima metto

    printf("numero: ");
    scanf("%d", &side);


    succede che nel programma compilato viene ignorato

    printf("carattere: ");
    scanf("%c", &car);


    e la struttura for invece di restituire ciò che dovrebbe (un quadrato di lato "side" stampato con il carattere "car") stampa una serie di spazi.

    Mi sembra molto strano perchè non mi era mai capitato.
    Se invece della specifica %c uso però %d (cambiando anche le dichiarazioni da char a int) il problema non compare.
    "Guardateli i credenti di tutte le religioni! Chi odiano essi più di ogni altro? Colui che spezza le lor tavole dei valori, il violatore, il corruttore. Ma questi è colui che crea." Nietzsche

  4. #4
    Originariamente inviato da spqr
    Se prima metto

    printf("numero: ");
    scanf("%d", &side);


    succede che nel programma compilato viene ignorato

    printf("carattere: ");
    scanf("%c", &car);


    e la struttura for invece di restituire ciò che dovrebbe (un quadrato di lato "side" stampato con il carattere "car") stampa una serie di spazi.

    Mi sembra molto strano perchè non mi era mai capitato.
    Se invece della specifica %c uso però %d (cambiando anche le dichiarazioni da char a int) il problema non compare.
    metti un fflush(stdin); tra le due scanf,in modo tale da "pulire" il buffer di lettura ed evitare di saltare la seconda


    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    Utente di HTML.it L'avatar di spqr
    Registrato dal
    Aug 2002
    Messaggi
    978
    Funziona andrea, grazie.
    Ma come mai solo per i caratteri c'è bisogno della funzione fflush(stdin);?
    "Guardateli i credenti di tutte le religioni! Chi odiano essi più di ogni altro? Colui che spezza le lor tavole dei valori, il violatore, il corruttore. Ma questi è colui che crea." Nietzsche

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772

    Re: [C] Esercizi da neofita

    Originariamente inviato da spqr
    2.DISPERAZIONE
    Le funzioni ricorsive sono un incubo...
    Potete consigliarmi materiale sulla rete che spieghino molto chiaramente come funzionano?[/B]
    La funzione ricorsiva è una funzione che chiama se stessa un numero finito di volte. Generalmente al suo interno trovi un if/while/for di controllo su una variabile che la funzione passa a se stessa come parametro, modificandola ogni volta (in modo che prima o poi questa variabile nn faccia verificare la condizione e che la ricorsione si fermi)

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void example(int);
    
    void main(){
    
    	example(10);
    }
    
    void example(int nr){
    
    	if(nr){
    		fprintf(stdout, "%d\n", nr);
    		example(--nr);
    		}
    	else
    	fprintf(stdout, "Fine ricorsione");
    }

    Il vantaggio è un codice compatto. Lo svantaggio è l'utilizzo di memoria.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  7. #7
    Utente di HTML.it L'avatar di spqr
    Registrato dal
    Aug 2002
    Messaggi
    978
    Ti ringrazio infinitejustice.
    Mi servirà molta pratica per riuscire a capire bene la ricorsività.
    "Guardateli i credenti di tutte le religioni! Chi odiano essi più di ogni altro? Colui che spezza le lor tavole dei valori, il violatore, il corruttore. Ma questi è colui che crea." Nietzsche

  8. #8
    spqr vai su wwww.myxperience.net.....ci sono delle guide in c molto semplici e aggiornate costantemente che ti possono aiutare!

  9. #9
    Originariamente inviato da spqr
    Funziona andrea, grazie.
    Ma come mai solo per i caratteri c'è bisogno della funzione fflush(stdin);?
    perchè se leggi di seguito +caratteri non devi digitarli uno alla volta e dare invio, ma tutti di seguito.

    Oppure utilizzi fflush(stdin); che pulisce il buffer di lettura

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.