Oppure

Loading
20/02/12 16:26
Kvashir
Ciao ragazzi, ho programmato in PHP per tanti anni e ora causa università sto studiando il c.

Non me la cavo male, considerando la sintassi simile... però, volevo da voi un opinione su quello che dovrebbe essere l'iter da seguire per imparare bene la programmazione in codesto linguaggio :)

Vi allego l'ultimo programmino che ho creato, sicuramente molto basilare, per rendervi l'idea del mio status:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
    Nome:       Impiccatelo 1.0
    Autore:     Antonio xxxxx
    Data:       12/02/2012
*/

void playGame()
{

    /*
        | Definizione variabili:
        |
        |   - letter:       char, lettera digitata dal giocatore.
        |   - word:         array, parola da indovinare, impostata su "parola".
        |   - wordCache:    array, parola cifrata.
        |   - lCache:       array, lista le lettere già digitate.
        |   - i:            int, contatore.
        |   - tries:        int, il numero di tentativi rimanenti.
        |   - errors:       int, il numero di errori commessi.
        !   - cacheTries:   int, contatore.
        |   - wordlenght:   int, ritorna la lunghezza della parola tramite la funzione strlen();
        |   - flag:         int, contatore necessario per uscire dal ciclo.
        |   - lCacheLenght: int, ritorna il numero di lettere contenute nella cache.
        |

    */

    char letter;
    char lCache[25];
    char word[25]="parola";
    char wordCache[25]="Ciao ragazzi, ho programmato in PHP per tanti anni e ora causa università sto studiando il c.


Non me la cavo male, considerando la sintassi simile... però, volevo da voi un opinione su quello che dovrebbe essere l'iter da seguire per imparare bene la programmazione in codesto linguaggio :)

Vi allego l'ultimo programmino che ho creato, sicuramente molto basilare, per rendervi l'idea del mio status:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
    Nome:       Impiccatelo 1.0
    Autore:     Antonio xxxxx
    Data:       12/02/2012
*/

void playGame()
{

    /*
        | Definizione variabili:
        |
        |   - letter:       char, lettera digitata dal giocatore.
        |   - word:         array, parola da indovinare, impostata su "parola".
        |   - wordCache:    array, parola cifrata.
        |   - lCache:       array, lista le lettere già digitate.
        |   - i:            int, contatore.
        |   - tries:        int, il numero di tentativi rimanenti.
        |   - errors:       int, il numero di errori commessi.
        !   - cacheTries:   int, contatore.
        |   - wordlenght:   int, ritorna la lunghezza della parola tramite la funzione strlen();
        |   - flag:         int, contatore necessario per uscire dal ciclo.
        |   - lCacheLenght: int, ritorna il numero di lettere contenute nella cache.
        |

    */

    char letter;
    char lCache[25];
    char word[25]="parola";
    char wordCache[25]="{parsed_message}";

    int i;
    int tries=5;
    int errors=0;
    int cacheTries=0;
    int wordlenght=strlen(word);

    // Imposto il massimo di errori a 5 ed eseguo un ciclo while fino al raggiungimento della soglia. (Praticamente corrisponde al numero dei tentativi).
    while(errors!=5)
    {
        // Recupero la lunghezza della parola da indovinare necessaria per contare gli errori e quella della cache contenente le lettere provate.
        int flag=strlen(word), lCacheLenght=strlen(lCache);

        // Pulisco la schermata DOS.
        system("cls");

        // Stampo il numero dei tentativi rimanenti.
        printf("# hai a disposizione %i tentativi per indovinare la parola seguente:\n\n", tries);

        // Stampo la parola criptata, Esempio: PAROLA = ______
        // Ad ogni iterazione gli spazi verranno sostituiti in caso di lettera corrispondente.
        for(i=0; i<wordlenght; i++)
        {
            if(wordCache[i]=='{parsed_message}')
            {
                printf("_");
            }
            else
            {
                printf("%c", wordCache[i]);
            }
        }

        printf("\n\n");

        // Stampo le lettere già provate tramite un ciclo for sull'array lCache solo nel caso in cui non sia il primo tentativo.
        if(cacheTries!=0)
        {
            printf("# Hai gia' provato le seguenti lettere: ");

            for(i=0; i<lCacheLenght; i++)
            {
                printf("%c", lCache[i]);
            }

            printf("\n\n");
        }

        // Recupero la lettera "tentativo" tramite scanf();
        printf("# Inserisci una lettera: ");

        scanf("%c", &letter);

        // Pulisco il buffer onde evitare problemi
        getchar();

        // Aggiungo all'array lCache, nella posizione data dalla variabile cacheTries. Incrementata ad ogni iterazione.
        lCache[cacheTries]=letter;

        // Tramite ciclo for eseguo la copia della lettera indovinata nella stessa posizione dell'array wordCache, inizialmente vuoto.
        for(i=0; i<wordlenght; i++)
        {
            // Se la lettera è presente eseguo la copia.
            if(word[i]==letter)
            {
                wordCache[i]=word[i];
            }
            // Altrimenti, decremento la variabile flag.
            else
            {
                flag--;
            }
        }

        // Se la lunghezza della variabile flag è zero, ovvero la lettera provata non fa parte della parola misteriosa, aggiungo un errore e decremento i tentativi.
        if(flag==0)
        {
            errors++;
            tries--;
        }

        // Aumento in contatore necessario all'array lCache.
        cacheTries++;
    }

    // Se gli errori arrivano il giocatore perde e viene riportato alla funzione main.
    if(errors==5)
    {
        system("cls");
        printf("# Hai esaurito le tue possibilita', hai perso!\n\n");
        system("pause");
        system("cls");
        main();
    }

}

int main()
{

    int sceltaMenu;
    char cache[25];
    char l;

    printf("######################################\n");
    printf("#                                    #\n");
    printf("# 1: Inizia il gioco                 #\n");
    printf("#                                    #\n");
    printf("# 2: ##############                  #\n");
    printf("#                                    #\n");
    printf("# 3: ##############                  #\n");
    printf("#                                    #\n");
    printf("######################################\n");

    printf("\n\nInserisci una scelta: ");

    scanf("%i", &sceltaMenu);

    getchar();

    switch(sceltaMenu)
    {
        case 1: system("cls"); playGame(); break;
        default: playGame(); break;
    }

    return;

}
"; int i; int tries=5; int errors=0; int cacheTries=0; int wordlenght=strlen(word); // Imposto il massimo di errori a 5 ed eseguo un ciclo while fino al raggiungimento della soglia. (Praticamente corrisponde al numero dei tentativi). while(errors!=5) { // Recupero la lunghezza della parola da indovinare necessaria per contare gli errori e quella della cache contenente le lettere provate. int flag=strlen(word), lCacheLenght=strlen(lCache); // Pulisco la schermata DOS. system("cls"); // Stampo il numero dei tentativi rimanenti. printf("# hai a disposizione %i tentativi per indovinare la parola seguente:\n\n", tries); // Stampo la parola criptata, Esempio: PAROLA = ______ // Ad ogni iterazione gli spazi verranno sostituiti in caso di lettera corrispondente. for(i=0; i<wordlenght; i++) { if(wordCache[i]=='Ciao ragazzi, ho programmato in PHP per tanti anni e ora causa università sto studiando il c.

Non me la cavo male, considerando la sintassi simile... però, volevo da voi un opinione su quello che dovrebbe essere l'iter da seguire per imparare bene la programmazione in codesto linguaggio :)

Vi allego l'ultimo programmino che ho creato, sicuramente molto basilare, per rendervi l'idea del mio status:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
    Nome:       Impiccatelo 1.0
    Autore:     Antonio xxxxx
    Data:       12/02/2012
*/

void playGame()
{

    /*
        | Definizione variabili:
        |
        |   - letter:       char, lettera digitata dal giocatore.
        |   - word:         array, parola da indovinare, impostata su "parola".
        |   - wordCache:    array, parola cifrata.
        |   - lCache:       array, lista le lettere già digitate.
        |   - i:            int, contatore.
        |   - tries:        int, il numero di tentativi rimanenti.
        |   - errors:       int, il numero di errori commessi.
        !   - cacheTries:   int, contatore.
        |   - wordlenght:   int, ritorna la lunghezza della parola tramite la funzione strlen();
        |   - flag:         int, contatore necessario per uscire dal ciclo.
        |   - lCacheLenght: int, ritorna il numero di lettere contenute nella cache.
        |

    */

    char letter;
    char lCache[25];
    char word[25]="parola";
    char wordCache[25]="{parsed_message}";

    int i;
    int tries=5;
    int errors=0;
    int cacheTries=0;
    int wordlenght=strlen(word);

    // Imposto il massimo di errori a 5 ed eseguo un ciclo while fino al raggiungimento della soglia. (Praticamente corrisponde al numero dei tentativi).
    while(errors!=5)
    {
        // Recupero la lunghezza della parola da indovinare necessaria per contare gli errori e quella della cache contenente le lettere provate.
        int flag=strlen(word), lCacheLenght=strlen(lCache);

        // Pulisco la schermata DOS.
        system("cls");

        // Stampo il numero dei tentativi rimanenti.
        printf("# hai a disposizione %i tentativi per indovinare la parola seguente:\n\n", tries);

        // Stampo la parola criptata, Esempio: PAROLA = ______
        // Ad ogni iterazione gli spazi verranno sostituiti in caso di lettera corrispondente.
        for(i=0; i<wordlenght; i++)
        {
            if(wordCache[i]=='{parsed_message}')
            {
                printf("_");
            }
            else
            {
                printf("%c", wordCache[i]);
            }
        }

        printf("\n\n");

        // Stampo le lettere già provate tramite un ciclo for sull'array lCache solo nel caso in cui non sia il primo tentativo.
        if(cacheTries!=0)
        {
            printf("# Hai gia' provato le seguenti lettere: ");

            for(i=0; i<lCacheLenght; i++)
            {
                printf("%c", lCache[i]);
            }

            printf("\n\n");
        }

        // Recupero la lettera "tentativo" tramite scanf();
        printf("# Inserisci una lettera: ");

        scanf("%c", &letter);

        // Pulisco il buffer onde evitare problemi
        getchar();

        // Aggiungo all'array lCache, nella posizione data dalla variabile cacheTries. Incrementata ad ogni iterazione.
        lCache[cacheTries]=letter;

        // Tramite ciclo for eseguo la copia della lettera indovinata nella stessa posizione dell'array wordCache, inizialmente vuoto.
        for(i=0; i<wordlenght; i++)
        {
            // Se la lettera è presente eseguo la copia.
            if(word[i]==letter)
            {
                wordCache[i]=word[i];
            }
            // Altrimenti, decremento la variabile flag.
            else
            {
                flag--;
            }
        }

        // Se la lunghezza della variabile flag è zero, ovvero la lettera provata non fa parte della parola misteriosa, aggiungo un errore e decremento i tentativi.
        if(flag==0)
        {
            errors++;
            tries--;
        }

        // Aumento in contatore necessario all'array lCache.
        cacheTries++;
    }

    // Se gli errori arrivano il giocatore perde e viene riportato alla funzione main.
    if(errors==5)
    {
        system("cls");
        printf("# Hai esaurito le tue possibilita', hai perso!\n\n");
        system("pause");
        system("cls");
        main();
    }

}

int main()
{

    int sceltaMenu;
    char cache[25];
    char l;

    printf("######################################\n");
    printf("#                                    #\n");
    printf("# 1: Inizia il gioco                 #\n");
    printf("#                                    #\n");
    printf("# 2: ##############                  #\n");
    printf("#                                    #\n");
    printf("# 3: ##############                  #\n");
    printf("#                                    #\n");
    printf("######################################\n");

    printf("\n\nInserisci una scelta: ");

    scanf("%i", &sceltaMenu);

    getchar();

    switch(sceltaMenu)
    {
        case 1: system("cls"); playGame(); break;
        default: playGame(); break;
    }

    return;

}
') { printf("_"); } else { printf("%c", wordCache[i]); } } printf("\n\n"); // Stampo le lettere già provate tramite un ciclo for sull'array lCache solo nel caso in cui non sia il primo tentativo. if(cacheTries!=0) { printf("# Hai gia' provato le seguenti lettere: "); for(i=0; i<lCacheLenght; i++) { printf("%c", lCache[i]); } printf("\n\n"); } // Recupero la lettera "tentativo" tramite scanf(); printf("# Inserisci una lettera: "); scanf("%c", &letter); // Pulisco il buffer onde evitare problemi getchar(); // Aggiungo all'array lCache, nella posizione data dalla variabile cacheTries. Incrementata ad ogni iterazione. lCache[cacheTries]=letter; // Tramite ciclo for eseguo la copia della lettera indovinata nella stessa posizione dell'array wordCache, inizialmente vuoto. for(i=0; i<wordlenght; i++) { // Se la lettera è presente eseguo la copia. if(word[i]==letter) { wordCache[i]=word[i]; } // Altrimenti, decremento la variabile flag. else { flag--; } } // Se la lunghezza della variabile flag è zero, ovvero la lettera provata non fa parte della parola misteriosa, aggiungo un errore e decremento i tentativi. if(flag==0) { errors++; tries--; } // Aumento in contatore necessario all'array lCache. cacheTries++; } // Se gli errori arrivano il giocatore perde e viene riportato alla funzione main. if(errors==5) { system("cls"); printf("# Hai esaurito le tue possibilita', hai perso!\n\n"); system("pause"); system("cls"); main(); } } int main() { int sceltaMenu; char cache[25]; char l; printf("######################################\n"); printf("# #\n"); printf("# 1: Inizia il gioco #\n"); printf("# #\n"); printf("# 2: ############## #\n"); printf("# #\n"); printf("# 3: ############## #\n"); printf("# #\n"); printf("######################################\n"); printf("\n\nInserisci una scelta: "); scanf("%i", &sceltaMenu); getchar(); switch(sceltaMenu) { case 1: system("cls"); playGame(); break; default: playGame(); break; } return; }
aaa
20/02/12 17:22
dmr
Ciao, ho letto il codice velocemente , pero' mi sono accorto che quando dichiari lCache non gli metti poi il terminatore di stringa e quindi strlen potrebbe ritornare un valore sbagliato a lCacheLenght. Alla linea 128 chiami il main che non si potrebbe fare, sarebbe meglio sostituirla con return che fa uscire dalla funzione.
Ultima modifica effettuata da dmr 21/02/12 8:48
aaa