Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82

    [c] Problema con apertura file, in cui il nome del file è chiesto all'utente

    Ciao a tutti, volevo chiedere un consiglio in quanto non riesco a far funzionare il programma sotto riportato; il problema sorge nel momento in cui si chiede all'utente di inserire il nome del file dentro il quale saranno scritti dei valori dettati dall'utente stesso. Il problema penso proprio stia nel fatto che il nome è rappresentato da una stringa, ma nel momento in cui faccio:

    fp=fopen(nome_file,"r");

    con nome_file prende solo il primo carattere della stringa. Potreste gentilmente indicarmi come risolvere il problema?

    Grazie in anticipo .


    # include <stdio.h>


    int main(void)
    {

    FILE *fp;
    int valore;
    char nome_file[20];
    int i=0;

    do {

    printf("Inserisci nome file: ");
    gets(nome_file);
    printf("file inserito: ");
    puts(nome_file);



    fp=fopen(nome_file,"r");

    if(fp!=0){

    printf("Errore, file già esistente");

    fclose(fp);

    i=0;
    }

    else{


    do{

    printf("\nInserisci un numero: ");
    scanf("%d",&valore);

    fprintf(fp,"%d\n",valore);
    }while(valore!=-1);


    i=1;
    fclose(fp);
    }

    }while(i==0);

    system("pause");

    }

  2. #2
    ti ho segnato quello che provaco l'errore, ciao
    codice:
    # include <stdio.h>
    
    
    int main()
    {
    
    	FILE *fp;
    	
    	int valore;
    	char nome_file[20];
    	int i=0;
    
    	do {
    
    		printf("Inserisci nome file: ");
    
    /* meglio la scanf che la gets , che è deprecata */
    		scanf("%s", nome_file);
    		printf("file inserito: ");
    		puts(nome_file);
    
    		fp = fopen(nome_file, "r");
    
    		if ( fp ) {
    
    			printf("Errore, file già esistente\n");
    
    			fclose(fp);
    
    			i = 0;
    		}
    		else{
    
    /* non si chiude un file non aperto */
    //			fclose(fp);
    
    			fp = fopen(nome_file, "w");
     
    
    			do{
    
    				printf("\nInserisci un numero: ");
    				scanf("%d",&valore);
    
    				fprintf(fp,"%d\n",valore);
    		
    			} while ( valore != -1 );	
    
    
    			i = 1;
    		}
    
    	} while ( i == 0 );
    
    	return (0);
    
    }

  3. #3
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    Ciao, grazie mille per le correzioni, mi ero appena accorto di quell'errore, infatti l'ho modificato in contemporanea al tuo post ; in effetti non sapevo come fare il controllo e come mi hai fatt notare non era 0 ma 1 il valore che deve restituire se il file esiste già.. un'ultima cosa, ho notato che ci siamo dimenticati l'fclose finale, però non da lo stesso problemi, è normale o è un caso?

  4. #4
    è buona norma sempre chiudere i file pointer aperti anche perchè i descrittori di file sono una risorsa limitata.
    ciao
    sergio

  5. #5
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    Scusa se ti disturbo ancora, ma riguardando mi sn chiesto come mai hai aperto il file all'inizio (prima dell'if) e poi ancora nell'else.. alla fine si dovrebbe chiudere solo se passa per l'if, perciò quando è nell'else il file dovrebbe essere ancora aperto no?

  6. #6
    se il flusso va nell'else vuo dire che il puntatore fp è NULL, per cui il file non è aperto.
    Mi soffermo ancora una volta sulla necessità di chiudere il file, la chiusura svuota i buffer e garantisce che tutto sia scritto su disco. Al termine del programma, in ogni caso, ogni file aperto viene chiuso automaticamente quindi teoricamente potresti omettere la chiusura.
    Comunque quello che ho riportato io è il codice scritto da te, tolto l'errore a runtime.
    ciao
    sergio

  7. #7
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82
    Ti ringrazio per la pazienza, e mi rendo conto della baggianata che ho detto ; infatti il controllo era sulla lettura, in seguito invece si apre il file da creare in scrittura.

    Grazie ancora per i consigli, come avrai notato sono ancora alle prime armi


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 © 2024 vBulletin Solutions, Inc. All rights reserved.