[C] Apertura file

Pinturicchio10
Ciao a tutti. Sto studiando il linguaggio i programmazione C e sto avendo alcuni problemi con i file. Non sono problemi di comprensione, in quanto sto scrivendo dei programmi che devono leggere da alcuni file creati con blocco note e con delle informazioni ma quando faccio il controllo dell'apertura del file mi esce sempre "Non si puo aprire il file" (ovviamente è un controllo che nell' algoritmo ho inserito io). Nella fopen ho usato sia la modalità "r" che "rb" ma nulla. Il guaio è che non posso mai testare se il programma funziona o meno. Inoltre il file si trova nella stessa cartella dove c'è l'eseguibile...credo sia giusto perchè quando invece creo un file ex-novo mi viene creato proprio nella cartella dove è il programma. Dove è dunque l'errore?
Grazie.

Risposte
Umby2
ti conviene mettere il codice...

Pinturicchio10
/* Contare numero di caratteri, parole, righe di un file da linea di comando */

#include
#include
#include
#define NUM_MAX 50

int caratteri(FILE *fp);
int parole(FILE *fp);
int righe(FILE *fp);

int main(int argc, char *argv[]) {

FILE *fp;
int num_caratteri, num_parole, num_righe;

if(argc != 2) {
printf("Devi inserire il nome di un solo file\n");
exit(EXIT_FAILURE);
}

if((fp = fopen(argv[1], "r")) == NULL) {
printf("Non si puo' aprire %s", argv[1]);
exit(EXIT_FAILURE);
}

num_caratteri = caratteri(fp);
num_parole = parole(fp);
num_righe = righe(fp);

printf("Numero di caratteri: %d\n", num_caratteri);
printf("Numero di parole: %d\n", num_parole);
printf("Numero di righe: %d\n", num_righe);

fclose(fp);

return 0;
}


int caratteri(FILE *fp) {

char ch;
int n = 0;

while((ch = fgetc(fp)) != EOF)
n++;

return n;

}

int parole(FILE *fp) {

char riga[NUM_MAX];
int n = 0;

while((fscanf(fp, "%s", &riga)) != EOF)
n++;

return n;
}


int righe(FILE *fp) {

char ch;
int n = 0;

while((ch = fgetc(fp)) != EOF)
if(ch == '\n')
n++;

return n;

}

apatriarca
A me funziona l'apertura del file, tuttavia il programma non funziona perché EOF non è un char, ma un int. Il confronto sarà sempre positivo e si crea un loop infinito.

Pinturicchio10
E' strano perchè il libro fa questo controllo ch=fgetcp(file) != EOF...come dovrei risolvere il problema? Devo dichiarare semplicemente ch come int anzi char?

Ma il problema di fondo è sempre l'apertura del file...ho come la sensazione che forse sta nella cartella sbagliata ma sta nella stessa del programma..non capico quale sia l'errore...

apatriarca
L'istruzione dell'apertura del file è corretta. Suppongo che il problema sia quindi nel modo in cui hai lanciato il programma.

Pinturicchio10
Ho cambiato anche il programa cercando di aprire un file specifico, cioè invece di argv[1] metto proprio il nome id un file che sta nella stessa cartella dle programma, ma nada...non so prp piu cosa fare...

apatriarca
In che modo lanci il programma? Su quale sistema?

Pinturicchio10
Io uso DEV C++ come programma per compilare ed eseguire, ma devo confessarti che ultimamente si comporta stranamente...cioè prima compilavo e pochi secondi mi usciva il risultato, ora invece il programma si abbandona a infiniti processi, nella barra sotto si vede ogni riga del programma che scorre, e a volte anche di altri programmi, come se il programma non sostenesse più lo sforzo. Ogni volta devo disinstallare il programma e reinstallarlo, riesco cosi a fare qualche compilazione ma poi da di nuovo i numeri. Forse è per questa strana situazione che non posso testare il programma dei file...ho anche scaricato ora un altro compilatore, code blocks, ma non compila mi dice smepre che "Il file non è stato costruito" e anche se metto build poi non cambia nulla...i compilatori ce l'hanno con me forse... :lol:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.