Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] Comando parola di accesso.

    Salve a tutti, sono alle prime armi con la programmazione, e mi è venuto subito un dubbio.
    Volevo creare un piccolo programma sempre che si apre con la finestra di dos, che però richiede una specie di password per rivelare un'informazione per esempio così:

    Mese-Giorno=?
    (tu scrivi per esempio Marzo-12)
    La diritta via era smarrita, dal cammino mi ritrovai disperso.

    Mese e giorno sono all'inizio con il comando printf, quello che devi scrivere il mese e il giorno dovrebbe essere scanf, ma non capisco come scriverlo -.-''
    e sempre teoricamente per farne di più? cioè mettendo più parole chiave e più risposte??
    è urgente per favore

  2. #2
    ti serve un database(preferibilmente) o un file in cui salvi le parole chiave e le relative risposte che il programma deve restituire

    visto che i database, essendo un principiante, immagino tu non li sappia ancora usare, salva tutte le informazioni in un file ben strutturato e poi, all'avvio del programma, caricatele in un vettore di struct, dove ogni singola struct è formata da una stringa che indica la parola chiave e da un altra che indica la risposta da restituire

    a questo punto con un strcmp() confronti la parola chiave inserita dall'utente con tutte quelle presenti nel vettore
    se trovi un eguaglianza restituisci la risposta, altrimenti a fine ciclo informi l'utente che la chiave da lui inserita non è valida e non ha riscontri

    Si tratta di una procedura non ottimizzata a puri fini didattici. Ripeto, per fare qualcosa di serio, dovresti almeno usare un tabella di hash o, meglio ancora, direttamente un db, ma sono cose che apprenderai col tempo.

  3. #3
    ma per il file ben strutturato intendi all'interno del main?
    oppure all'inizio lo richiami utilizzando #define "nome del file"???
    scusa ma ancora non ci capisco moltissimo...
    grazie per la risposta velocissima!

  4. #4
    No, intendo che tu crei un file con una struttura fissa

    esempio:
    in testa al file metti un intero che rappresenta il numero totale di coppie parola_Chiave-Risposta
    nella riga iesima ci metti la parola chiave
    nella i+1esima ci metti la risposta

    e così via

    in questo modo quando avvii il programma, apri il tuo file, leggi il primo numero e lo usi per allocare dinamicamente il tuo vettore di struct

    quindi con un semplice ciclo leggi fino a fine file riga per riga, mettendo la prima riga nel campo chiave della struct dell'iesaima casella del vettore e la seconda nel campo risposta della stessa struct, quindi passi alla successiva casella del vettore e continui in questo modo

    Il resto del programma è per appunto fatto da confronti tra le parole inserite dall'utente e i campi chiave del tuo vettore

  5. #5
    cacchio è complicatissimo
    ti disturbo molto se ti chiedo se potessi scrivermi appena il primo esempio, e poi lo completo io??

  6. #6
    sempre mantenendo la struttura del file che ti ho detto sopra:
    in testa numero che rappresenta il numero di coppie parolachiave-risposta
    quindi dal i in poi una riga per parola chiave e una per risposta

    dovrebbe essere qualcosa del genere:
    codice:
    typedef struct{
    	char* parola_chiave;
    	char* risposta;
    }casella_t;
    
    int main(){
    	FILE *myfile;
    	int dim, i;
    	casella_t **vettore_dati; 
    	casella_t *temp;
    	char* stringaTemp[1024+1];
    
    
    	myfile = fopen ("dati.txt", "r");
    
    	if(myfile == NULL){
    		printf("errore in lettura o file non trovato\n");
    		return EXIT_FAILURE;
    	}
    
    	fscanf(myfile, "%d", &dim); // dim è il numero in testa al file, rappresenta il numero di coppie di parole_chiave-risposte presenti nel file
    	vettore_dati = (casella_t**) malloc (dim * sizeof(casella_t*)); //allochi la memoria per il vettore
    
    	for(i = 0; i<0; i++){
    		temp = (casella_t*) malloc (sizeof(casella_t)); //allochi la casella
    
    		fgets(stringaTemp, 1024, myfile); //leggi e metti nella stringa temporanea la parola chiave
    		temp->parola_chiave = (char*) malloc( strlen(stringaTemp) * sizeof(char)); //allochi lo spazio corretto per la stirnga
    		strcpy(temp->parola_chiave, stringaTemp); //copi
    
    		fgets(stringaTemp, 1024, myfile); //leggi la risposta
    		temp->risposta = (char*) malloc( strlen(stringaTemp) * sizeof(char)); //allochi lo spazio corretto
    		strcpy(temp->risposta, stringaTemp); //copi
    
    		vettore_dati[i] = temp;
    	}
    
    
    //tutto il resto del programma...
    	return EXIT_SUCCESS;
    }

  7. #7
    grazie mille!!!!!
    ah ultimissime cose, cosa vuole dire allocare la memoria per il vettore e allochi spazio corretto??

  8. #8
    il vettore è un vettore di puntatori a struct, non conoscendo la dimensione dello stesso prima di aver letto il file, non puoi definirlo in modo statico. Quindi devi allocarlo a run-time solo dopo aver letto la dimensione dello stesso dal file in questione

    La stringa, allo stesso modo, non ha una dimensione definita. Potrebbe essere lunga un carattere o mille. Per non sprecare memoria quindi la leggi interamente, la metti in una stringa ausiliaria che è lunga 1024 (ma puoi farla lunga a scelta) e poi tramite strlen ne ricavi la dimensione reale (strlen misura da inizio stringa a carattere di terminazione '\0') e la memorizzi là dove deve stare

    se ti servissero dettagli sulle varie funzioni qui

    se hai dubbi ti consiglio di studiarti più a fondo la gestione dei file e dell'allocazione dinamica prima di cimentarti con questo programma

  9. #9
    a va bene grazie ancora

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.