21/01/16 0:19
Salve a tutti, espongo il mio quesito.
Mi sto cimentando per hobby col c e nel frattempo vorrei imparare a programmare seriamente.
Vorrei creare il gioco dell'impiccato (data una frase xxx_xx_xx , la si deve indovinare).
Ho diversi dilemmi su alcuni punti. (Premesso che il programma, tranne qualche piccolo bug per lo più testuale, funziona, quindi la funzione "non dovrebbe" contenere errori, ma forse ne ho fatti in numero pari e si compensano XD.
Ecco una funzione del codice:
( una delle funzioni chiavi. Dato un puntatore ad una stringa,
ne torna un'altro che punta alla stringa contenente la frase celata.
La Stringa è controllata prima del passaggio, ha tutti i caratteri in minuscolo,
l'EOF finale e non continene lettere accentate ).
Perchè usare una funzione a parte e utilizzare i puntatori?
Per rende la funzione adoperabile anche in altri progetti (se la creassi dentro al main non potrei)
e perchè non so l'esatta lunghezza della stringa (viene pescata da un file con diverse frasi).
1 Punto: Per essere corretto, a fine funzione non dovrei deallocare la memoria allocata?
Potrei farlo nel main, ma ciò non renderebbe la funzione difficilmente adoperabile altrove?
2 Punto: Per tenere traccia di tutte le modifiche ai file, che posso usare?
Git mi pare eccessivo per pochi file.
3 Punto: I nomi variabili, commenti e identazione vanno bene?
a fine file vorrei aggiungere pure un CHANGELOG che tiene conto delle varie versioni,
ma non vorre appesantire troppo i sorgenti.
4 Punto: Ho spezzettato quasi tutto il programma in funzioni più piccole, fatto bene o male?
troppe funzioni non rallentano troppo l'esecuzione?
gli header e i file contenenti le funzioni devono avere lo stesso nome?
io ho creato un file .c per ogni che sto usando, e solo un header che racchiude tutti i prototipi.
Potrei accomunare varie funzioni tra loro, ma per ora ho preferito fare cosi,
almeno mi stampo le funzioni una ad una e le posso "correggere" anche a pc spento.
Per concludere dico che uso Visual Studio 2015 (versione free) ma ho anche lavorato con
Dev-c++ (perche è un ide in italiano) e un pochino con code::block (ma con cui non mi trovo)
Vorrei anche imparare a compilare da linea di comando in futuro
(ma se dite che sia necessario imparare a farlo fin da ora... mi cimento pure in questo).
Grazie fin da ora a tutti coloro volessero aiutarmi.
Mi sto cimentando per hobby col c e nel frattempo vorrei imparare a programmare seriamente.
Vorrei creare il gioco dell'impiccato (data una frase xxx_xx_xx , la si deve indovinare).
Ho diversi dilemmi su alcuni punti. (Premesso che il programma, tranne qualche piccolo bug per lo più testuale, funziona, quindi la funzione "non dovrebbe" contenere errori, ma forse ne ho fatti in numero pari e si compensano XD.
Ecco una funzione del codice:
( una delle funzioni chiavi. Dato un puntatore ad una stringa,
ne torna un'altro che punta alla stringa contenente la frase celata.
La Stringa è controllata prima del passaggio, ha tutti i caratteri in minuscolo,
l'EOF finale e non continene lettere accentate ).
Perchè usare una funzione a parte e utilizzare i puntatori?
Per rende la funzione adoperabile anche in altri progetti (se la creassi dentro al main non potrei)
e perchè non so l'esatta lunghezza della stringa (viene pescata da un file con diverse frasi).
/**************************************************************************************** * char* nascondiStr( char *stringa , size_t dim ) * * * * Funzione che crea un puntatore alla stringa nascosta * * del tipo (***_***) da una stringa normale * * Input * * - (char) *stringa : stringa da nascondere * * - (size_t) dim : dimensione della stringa da nascondere * * Output * * - (*char) puntatore di char alla stringa (***_***) * * * ***************************************************************************************/ /* librerie standard*/ #include <stdlib.h> #include <string.h> char* nascondiStr( char *stringa , size_t dim ) { /* DEFINIZIONI E INIZIALIZZAZIONI VARIABILI */ char *stringaNascosta = NULL ; /* Stringa di appoggio */ size_t i = 0 ; /* contatore per il for */ /* DEFINIZIONI E INIZIALIZZAZIONI VARIABILI */ /* alloco dim*char per la stringa da nascondere */ stringaNascosta = (char *)calloc( dim, sizeof( char ) ); /* copia la stringa da nascondere su quella che verrà passata */ strcpy( stringaNascosta , stringa ); /* ciclo per esaminare tutti i caratteri fino a EOF */ for( int i = 0; stringaNascosta[i] != 'Salve a tutti, espongo il mio quesito.
Mi sto cimentando per hobby col c e nel frattempo vorrei imparare a programmare seriamente.
Vorrei creare il gioco dell'impiccato (data una frase xxx_xx_xx , la si deve indovinare).
Ho diversi dilemmi su alcuni punti. (Premesso che il programma, tranne qualche piccolo bug per lo più testuale, funziona, quindi la funzione "non dovrebbe" contenere errori, ma forse ne ho fatti in numero pari e si compensano XD.
Ecco una funzione del codice:
( una delle funzioni chiavi. Dato un puntatore ad una stringa,
ne torna un'altro che punta alla stringa contenente la frase celata.
La Stringa è controllata prima del passaggio, ha tutti i caratteri in minuscolo,
l'EOF finale e non continene lettere accentate ).
Perchè usare una funzione a parte e utilizzare i puntatori?
Per rende la funzione adoperabile anche in altri progetti (se la creassi dentro al main non potrei)
e perchè non so l'esatta lunghezza della stringa (viene pescata da un file con diverse frasi).
/**************************************************************************************** * char* nascondiStr( char *stringa , size_t dim ) * * * * Funzione che crea un puntatore alla stringa nascosta * * del tipo (***_***) da una stringa normale * * Input * * - (char) *stringa : stringa da nascondere * * - (size_t) dim : dimensione della stringa da nascondere * * Output * * - (*char) puntatore di char alla stringa (***_***) * * * ***************************************************************************************/ /* librerie standard*/ #include <stdlib.h> #include <string.h> char* nascondiStr( char *stringa , size_t dim ) { /* DEFINIZIONI E INIZIALIZZAZIONI VARIABILI */ char *stringaNascosta = NULL ; /* Stringa di appoggio */ size_t i = 0 ; /* contatore per il for */ /* DEFINIZIONI E INIZIALIZZAZIONI VARIABILI */ /* alloco dim*char per la stringa da nascondere */ stringaNascosta = (char *)calloc( dim, sizeof( char ) ); /* copia la stringa da nascondere su quella che verrà passata */ strcpy( stringaNascosta , stringa ); /* ciclo per esaminare tutti i caratteri fino a EOF */ for( int i = 0; stringaNascosta[i] != '{parsed_message}'; i++ ) { /* Se trova una lettera minuscola lo pone uguale a '*' */ if( stringaNascosta[i] >= 97 && stringaNascosta[i] <= 122 ) { stringaNascosta[i] = '*'; }/* fine if */ }/* fine for */ return stringaNascosta; } /* fine main */
1 Punto: Per essere corretto, a fine funzione non dovrei deallocare la memoria allocata?
Potrei farlo nel main, ma ciò non renderebbe la funzione difficilmente adoperabile altrove?
2 Punto: Per tenere traccia di tutte le modifiche ai file, che posso usare?
Git mi pare eccessivo per pochi file.
3 Punto: I nomi variabili, commenti e identazione vanno bene?
a fine file vorrei aggiungere pure un CHANGELOG che tiene conto delle varie versioni,
ma non vorre appesantire troppo i sorgenti.
4 Punto: Ho spezzettato quasi tutto il programma in funzioni più piccole, fatto bene o male?
troppe funzioni non rallentano troppo l'esecuzione?
gli header e i file contenenti le funzioni devono avere lo stesso nome?
io ho creato un file .c per ogni che sto usando, e solo un header che racchiude tutti i prototipi.
Potrei accomunare varie funzioni tra loro, ma per ora ho preferito fare cosi,
almeno mi stampo le funzioni una ad una e le posso "correggere" anche a pc spento.
Per concludere dico che uso Visual Studio 2015 (versione free) ma ho anche lavorato con
Dev-c++ (perche è un ide in italiano) e un pochino con code::block (ma con cui non mi trovo)
Vorrei anche imparare a compilare da linea di comando in futuro
(ma se dite che sia necessario imparare a farlo fin da ora... mi cimento pure in questo).
Grazie fin da ora a tutti coloro volessero aiutarmi.
'; i++ ) { /* Se trova una lettera minuscola lo pone uguale a '*' */ if( stringaNascosta[i] >= 97 && stringaNascosta[i] <= 122 ) { stringaNascosta[i] = '*'; }/* fine if */ }/* fine for */ return stringaNascosta; } /* fine main */
1 Punto: Per essere corretto, a fine funzione non dovrei deallocare la memoria allocata?
Potrei farlo nel main, ma ciò non renderebbe la funzione difficilmente adoperabile altrove?
2 Punto: Per tenere traccia di tutte le modifiche ai file, che posso usare?
Git mi pare eccessivo per pochi file.
3 Punto: I nomi variabili, commenti e identazione vanno bene?
a fine file vorrei aggiungere pure un CHANGELOG che tiene conto delle varie versioni,
ma non vorre appesantire troppo i sorgenti.
4 Punto: Ho spezzettato quasi tutto il programma in funzioni più piccole, fatto bene o male?
troppe funzioni non rallentano troppo l'esecuzione?
gli header e i file contenenti le funzioni devono avere lo stesso nome?
io ho creato un file .c per ogni che sto usando, e solo un header che racchiude tutti i prototipi.
Potrei accomunare varie funzioni tra loro, ma per ora ho preferito fare cosi,
almeno mi stampo le funzioni una ad una e le posso "correggere" anche a pc spento.
Per concludere dico che uso Visual Studio 2015 (versione free) ma ho anche lavorato con
Dev-c++ (perche è un ide in italiano) e un pochino con code::block (ma con cui non mi trovo)
Vorrei anche imparare a compilare da linea di comando in futuro
(ma se dite che sia necessario imparare a farlo fin da ora... mi cimento pure in questo).
Grazie fin da ora a tutti coloro volessero aiutarmi.