Repository 32bit  Forum
Repository 64bit  Wiki

problema percorso file

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

problema percorso file

Messaggioda Blallo » mer mag 13, 2009 12:56

salve ragazzi, sto usando per la prima volta i file in C e ho un problema con questo:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 80

int main()
{
    char file[MAXNUM];
    FILE *fp;
    int v, max, min, count=0, somma;
    printf("Inserisci percorso file:");
    gets(file);

    if ((fp=fopen("file","r"))==NULL)
    {
        fprintf(stderr, "Errore");
        return EXIT_FAILURE;
    }

    if ((fscanf(fp, "%d", &v))!=EOF)
    {
        max=min=somma=v;
        count++;
    }
    else
    {
        fprintf(stderr, "File Vuoto");
        return EXIT_FAILURE;
    }

    while ((fscanf(fp, "%d", &v))!=EOF)
    {
        count++;
        somma+=v;
        if (v>max)
            max=v;
        else if (v<min)
            min=v;
    }

    printf("Massimo:%d\n Minimo:%d\n Somma:%d\n Media:%d\n Numero Valori:%d", max, min, somma, somma/count, count);
    fclose(fp);
}

Tutto bene (anche se mi da 2 warning), ma quando vado per dargli il percorso non va...è come se non lo trovasse
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda paolo86 » mer mag 13, 2009 13:12

file è una variabile... non la devi mettere tra apici. devi scriverla così:
Codice: Seleziona tutto
    if ((fp=fopen(file, "r"))==NULL)


Per i warning.... evita assolutamente di usare la funzione gets...
'man 3 gets' ha scritto:...
BUGS
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
...


Al posto di gets usa fgets è meglio.

Ciao!
Avatar utente
paolo86
Linux 1.0
Linux 1.0
 
Messaggi: 73
Iscritto il: lun lug 14, 2008 18:22
Località: Cagliari
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 13:15

ma cio non risolve il problema...gli do il percorso
/home/nomeutente/ecc ecc
e non va...
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda Mercyful » mer mag 13, 2009 15:58

leggendolo così dovrebbe funzionare, tenedo conto dei seguenti accorgimenti:
- nel path inserito non ci devono essere spazi
- il path non deve essere lungo più di 79 caratteri
- il file non deve contenere stringhe o elementi che non sono numeri.


quello che ho provato è questo:
Codice: Seleziona tutto
 
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 80

int main()
{
    char file[MAXNUM];
    FILE *fp;
    int v, max, min, count=0, somma;
    printf("Inserisci percorso file:");
    //gets(file);
    scanf("%s",file);

    if ((fp=fopen(file,"r"))==NULL)
    {
        fprintf(stderr, "Errore\n");
        return EXIT_FAILURE;
    }

    if ((fscanf(fp, "%d", &v))!=EOF)
    {
        max=min=somma=v;
        count++;
    }
    else
    {
        fprintf(stderr, "File Vuoto");
        return EXIT_FAILURE;
    }

    while ((fscanf(fp, "%d", &v))!=EOF)
    {
        count++;
        somma+=v;
        if (v>max)
            max=v;
        else if (v<min)
            min=v;
    }

    printf("Massimo:%d\n Minimo:%d\n Somma:%d\n Media:%d\n Numero Valori:%d\n", max, min, somma, somma/count, count);
    fclose(fp);
}
Avatar utente
Mercyful
Linux 2.0
Linux 2.0
 
Messaggi: 196
Iscritto il: ven lug 25, 2008 17:20
Località: Torino
Nome Cognome: Ilario Pittau
Slackware: 13.0
Kernel: 2.6.29.6-generic
Desktop: xfce 4.6

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 17:07

nada...warning spariti ma mi da sempre errore:(
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda Mercyful » mer mag 13, 2009 17:13

scusa come lo esegui/compili...??
Avatar utente
Mercyful
Linux 2.0
Linux 2.0
 
Messaggi: 196
Iscritto il: ven lug 25, 2008 17:20
Località: Torino
Nome Cognome: Ilario Pittau
Slackware: 13.0
Kernel: 2.6.29.6-generic
Desktop: xfce 4.6

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 17:31

uso codeblocks come IDE....e poi lo eseguo da console
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda Mercyful » mer mag 13, 2009 17:53

non saprei.. io faccio tutto da console in questo modo
Codice: Seleziona tutto
mercyful:~$ cd /home/mercyful/Desktop/synchronize/provec/
mercyful:~/Desktop/synchronize/provec$ gcc t.
t.c     t.c~    t.txt   t.txt~
mercyful:~/Desktop/synchronize/provec$ gcc t.c ; ./a.out
Inserisci percorso file:/home/mercyful/Desktop/synchronize/provec/t.txt
Massimo:23
 Minimo:2
 Somma:66
 Media:8
 Numero Valori:8
mercyful:~/Desktop/synchronize/provec$ cat t.txt
12
2
3
5
6
7
8 23
mercyful:~/Desktop/synchronize/provec$


provaci te, sei sicuro di aver rispettato tutti i punti?
Avatar utente
Mercyful
Linux 2.0
Linux 2.0
 
Messaggi: 196
Iscritto il: ven lug 25, 2008 17:20
Località: Torino
Nome Cognome: Ilario Pittau
Slackware: 13.0
Kernel: 2.6.29.6-generic
Desktop: xfce 4.6

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 17:57

wow così va....
allora è l'IDE che non mi fa rispettare i path....grazie mille!
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda Mercyful » mer mag 13, 2009 18:11

prego, di niente! :thumbright:
Avatar utente
Mercyful
Linux 2.0
Linux 2.0
 
Messaggi: 196
Iscritto il: ven lug 25, 2008 17:20
Località: Torino
Nome Cognome: Ilario Pittau
Slackware: 13.0
Kernel: 2.6.29.6-generic
Desktop: xfce 4.6

Re: problema percorso file

Messaggioda Mario Vanoni » mer mag 13, 2009 20:32

jimmy_page_89 ha scritto:wow così va....
allora è l'IDE che non mi fa rispettare i path....grazie mille!


Rimane un errore:

if ((fscanf(fp, "%d", &v))!=EOF)
{
max=min=somma=v;
count++;
}
else
{
fprintf(stderr, "File Vuoto");
return EXIT_FAILURE;
}

man fscanf:

RETURN VALUE
These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

Se la riga letta non e` convertibile, fscanf ritorna 0 (zero),
ed il tuo else aspetta Godot, EOF == -1!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 20:38

in che senso non potrebbe essere convertibile?
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda Mario Vanoni » mer mag 13, 2009 20:55

jimmy_page_89 ha scritto:in che senso non potrebbe essere convertibile?


Metti che una sola riga del file contenga
###
provare per crederci.

fscanf ritorna 0,
ed il suo else aspetta Godot.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: problema percorso file

Messaggioda Blallo » mer mag 13, 2009 22:01

quindi a questo punto mi conviene mettere un altro controllo all'inizio in modo che verifichi che siano tutti numeri? (perchè solo di numeri ha bisogno)
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3215
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: problema percorso file

Messaggioda ulisse89 » gio mag 14, 2009 11:08

Potresti mettere di volta in volta l'output della fscanf in una variabile intera. Poi se è = 0 allora ignori ciò che ha letto, se è > 0 fai ciò che devi fare, se è EOF allora termini il ciclo.
Per esempio:
Codice: Seleziona tutto
int a = fscanf(fp, "%d", &v);
while(a  != EOF)
{
   if(a = 0)
      ;
   else
   {
      count++;
        somma+=v;
        if (v>max)
            max=v;
        else if (v<min)
            min=v;
        }
       
        a = fscanf(fp, "%d", &v);
}
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti