ciao! sono alle prime armi con la programmazione in C.. sto cercando di fare un esercizio che mi richiede l'apertura di 3 file e la lettura del contenuto. Il mio problema è che l'apertura mi dà questo errore: : No such file or directory.

Perdonatemi se ho fatto errori disumani ma sto cercando di imparare. Il programma che ho scritto è:

    #include<stdio.h>

void letturaVotiComune1(char nomefile,int v[4]){
    FILE*fp=fopen("nomefile","rb");

    if(fp==NULL){
        fprintf(stderr, "Non riesco ad aprire il file\n");
        perror("errore in apertura del file\n");
        }

    int i=0;
    int voto;

    while (fgetc(fp)!=EOF){
        fscanf(fp,"%i",&voto);
        v[i]=voto;
        i++;
        }

}

void stampaVotiComune1(int v[3]){
    int i;
    printf("CANDIDATO\tVOTI\n");
    int n=1;
    for (i=0;i<4;i++){
        printf("%i\t%i\n",n,v[i]);
        n++;
        }
}

int main(int argc,char** argv){
        if (argc<3){
            printf("non mi hai dato almeno 3 file\n");
            }
int i;
int c1[3];
int c2[3];
int c3[3];

        letturaVotiComune1(*argv[1],c1);
        letturaVotiComune1(*argv[2],c2);
        letturaVotiComune1(*argv[3],c3);

        stampaVotiComune1(c1);
        stampaVotiComune1(c2);
        stampaVotiComune1(c3);
}

quindi quando dal terminale richiamo il programma con :

xubuntu@xubuntu:~/Desktop$ gcc prova1.c -o prova1**

e poi:

xubuntu@xubuntu:~/Desktop$ ./prova1 comune1 comune2 comune3

mi dà:

Non riesco ad aprire il file
errore in apertura del file
: No such file or directory
Segmentation fault (core dumped)

specifico che i 3 file sono esattamente nel Desktop!

mi è venuto il dubbio che il problema sia il fatto che il programma legge come 'nomefile' *argv[] e quindi gli risulta che non esiste un file con tale nome, però non saprei come risolvere!

GRAZIE IN ANTICIPO!!

chiesto 10 Gen '15, 21:51

GiuliaC's gravatar image

GiuliaC
2513

modificato 10 Gen '15, 22:01

dadexix86's gravatar image

dadexix86 ♦♦
16.9k816161


Prima cosa, devi cambiare il prototipo di void letturaVotiComune1 da

void letturaVotiComune1(char nomefile,int v[4])

a

void letturaVotiComune1(char *nomefile,int v[4])

e poi, quando invochi la funzione devi usare

letturaVotiComune1(argv[1],c1);

invece di

letturaVotiComune1(*argv[1],c1);

Infine, nell'apertura del file devi usare

FILE*fp=fopen(nomefile,"rb");

invece di

FILE*fp=fopen("nomefile","rb");
coll. permanente

ha risposto 10 Gen '15, 22:21

enzotib's gravatar image

enzotib ♦♦
14.0k112186

modificato 10 Gen '15, 22:22

Enzotib grazie mille! I puntatori sono una cosa tremenda!! Grazie ancora

(10 Gen '15, 22:30) GiuliaC GiuliaC's gravatar image

@GiuliaC: se la risposta ha risolto, accettala.

(10 Gen '15, 23:27) enzotib ♦♦ enzotib's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×103

domanda posta: 10 Gen '15, 21:51

domanda visualizzata: 613 volte

ultimo aggiornamento: 10 Gen '15, 23:27

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.