Errore inaspettato nel mio codice in linguaggio C?

Il codice che riporto di seguito è una parte di uno switch. Il compilatore, non da nessun problema e mi fa avviare l'intero programma che funziona senza crashare. Il problema è che in realtà il programma non fa quel che c'è scritto nel codice ovvero se alla domanda digito s il file "Permanente.csts" non viene eliminato. Le dichiarazioni sono tutte regolari altrimenti non me lo compilerebbe. Come mai avviene ciò?? Dove sta la mia svista? 10 punti al migliore!!

case 4: fflush(stdin);

if(fopen("Permanente.csts","r") == NULL) { //Controllo se esiste il file

printf("\n\n\n\t\t\tIMPOSSIBILE ESEGUIRE L'ELIMINAZIONE\n");

printf("\t\t\t NON ESISTE ALCUN DATO MEMORIZZATO.\n\n\n");

goto menu;

}

printf("\nUna volta eliminati i dati memorizzati, sara' impossibile recuperarli.\n");

printf("Eliminare tutti i dati memorizzati? (S=SI, N=NO):\n");

scanf("%c", &scelta4); //domando se si è sicuri di voler eliminare i dati

if(scelta4 > 91) scelta4 = scelta4 - 32;

do {

switch (scelta4) { //Applico un altro switch per distinguere i vari casi di input

case 'S': remove("Permanente.csts");

printf("\n\n\n\t\t\t DATI ELIMINATI CORRETTAMENTE\n\n\n");

break;

case 'N': break;

default: fflush(stdin); //controllo del carattere immesso

printf("\nIl carattere inserito non e' valido\n");

break;

}

}

while (scelta4!='S' && scelta4!='N');

goto menu;

//ritorno al menu principale, lo so che il goto dovrebbe essere scongiurato, ma in questo caso ho //voluto fare un'eccezione

Aggiornamento:

@Maledetto

cosa intendi con "prova a settare al massimo i permessi sul file"?

Ti ringrazio del consiglio del controllo, lo faccio subito.

Aggiornamento 2:

-------

Facendo varie prove ho notato che se levo questa parte di codice:

if(fopen("Permanente.csts","r") == NULL) { //Controllo se esiste il file

printf("\n\n\n\t\t\tIMPOSSIBILE ESEGUIRE L'ELIMINAZIONE\n");

printf("\t\t\t NON ESISTE ALCUN DATO MEMORIZZATO.\n\n\n");

goto menu;

}

Funziona tutto. Come mai?

2 risposte

Classificazione
  • 8 anni fa
    Risposta preferita

    Se lo apri per controllarne l'esistenza devi anche chiuderlo!

    FILE *fp;

    if ((fp=fopen("Permanente.csts","r")) == NULL)

    { //Controllo se esiste il file

    printf("\n\n\n\t\t\tIMPOSSIBILE ESEGUIRE L'ELIMINAZIONE\n");

    printf("\t\t\t NON ESISTE ALCUN DATO MEMORIZZATO.\n\n\n");

    goto menu;

    }

    fclose (fp); <--- !!!

  • 8 anni fa

    Probabilmente è un problema di permessi sul file e/o sulla cartella che contiene il file, prova a settare al massimo i permessi sul file. In ogni caso, la funzione remove() ritorna un valore diverso da zero se va in errore non riuscendo a cancellare il file, quindi è buona norma fare controlli del genere

    if(remove("file.est") != 0) {

    printf("Non è stato possibile cancellare il file");

    }

Altre domande? Fai una domanda e ottieni le risposte che cerchi.