File in C

di il
3 risposte

File in C

Salve a tutti recentemente continuando lo studio e la lettura del libro riguardante la programmazione in C sono arrivato al capitolo in cui viene spiegato come creare/aprile un file (in questo caso di testo) e come successivamente modificarlo o semplicemente leggerlo.
Mi sorge però un problema: Quando vado a selezionare l'opzione 2 cioè "modifica del DataBase" il programma non rileva il comando fgets ritornando alla selezione del menu. In cosa sbaglio?? Lascio qui sotto ovviamente il codice. Grazie in anticipo per l'aiuto!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
	FILE *db;
	int option, returnvalue;
	char *string = (char *) malloc(100*sizeof(char));


	do{
	printf("\t\t\n SCEGLIERE UN OPZIONE");
	printf("\t\n 1) Creazione del Data Base");
	printf("\t\n 2) Modifica del Data Base");
	printf("\t\n 3) Lettura del Data base");
	printf("\t\n 0) Exit");
	printf("\n Inserisci la tua scelta: ");
	scanf("%d", &option);

	if (option == 1){
		db = fopen("DataBase", "w");  /*creazione del file*/
		fclose(db);
	}
	else{
		if (option==2){

			printf("Inserire ciò che si desidera: ");
			fgets(string, 100, stdin);

			db = fopen("DataBase","a");
			fwrite(string, 1, 100, db);
			free(string);
			fclose(db);

		}
		else{
			if (option == 3){
				db= fopen("DataBase","r");
				do{
					returnvalue = fread(string, 1, 100, db);
					if (returnvalue < 0)						/*Il file esiste?*/
						printf("Il file DataBase non esiste!");
					else
						printf("\n\t\"%s\"", string);
				} while (returnvalue!=0);  /*stampa tutto il contenuto del file*/
				fclose(db);
				free(string);
			}
		}
	}

	}while(option !=0);
}

3 Risposte

  • Re: File in C

    Innanzitutto devo dire che non ha molto senso allocare 100 bytes con malloc, definisci direttamente la stringa locale, nello stack, con
    char string[100];
    Ricorda che se usi malloc() devi anche verificare che abbia avuto successo, controllando che il puntatore restituito sia diverso da NULL.
    Infine, per quanto riguarda l'allocazione dinamica, attenzione alle free() che vedo le richiami un pò dove pare: se proprio allocare dinamicamente, ti suggerisco di inserire la free() dopo l'uscita dal ciclo.
    Per quanto riguarda il problema: ti compare la scritta "Inserire ciò che si desidera: " ?
  • Re: File in C

    candaluar ha scritto:


    Innanzitutto devo dire che non ha molto senso allocare 100 bytes con malloc, definisci direttamente la stringa locale, nello stack, con
    char string[100];
    Ricorda che se usi malloc() devi anche verificare che abbia avuto successo, controllando che il puntatore restituito sia diverso da NULL.
    Infine, per quanto riguarda l'allocazione dinamica, attenzione alle free() che vedo le richiami un pò dove pare: se proprio allocare dinamicamente, ti suggerisco di inserire la free() dopo l'uscita dal ciclo.
    Per quanto riguarda il problema: ti compare la scritta "Inserire ciò che si desidera: " ?
    grazie per la risposta comunque la scritta "inserire ciò che si desidera: " compare
  • Re: File in C

    Prova al posto di
       scanf("%d", &option);
    metti
       fgets(string, 100, stdin);
       option=atoi(string);
Devi accedere o registrarti per scrivere nel forum
3 risposte