Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    110

    chiarimenti su fopen, fprintf, fscanf

    Ciao a tutti

    per la prima volta sto usando le funzioni fopen, fclose, fprintf, fscanf per agire su un file.

    Ora avrei bisogno di alcuni chiarimenti, ho scritto un primo programmino che apre un file e dovrebbe leggere il contenuto (ci sono due numeri) per poi fare la somma ecco il codice

    codice:
    #include <stdlib.h> 
    #include <stdio.h>   
    
    main() { 
    int i,a,c;
    int a[1];   
    	    
    FILE *f;  
    
    for(i=0:i<1;i++)
    {
    f = fopen("c:/prova.txt", "r");   
      
    fscanf("%d",&a[i]); 
    fprintf(f, "il valore è %d",&a[i]); 
        
    fclose(f);
    }  
    c=a+b;  
    
    printf("il risultato è %d \n", &c);    
        
    system("PAUSE");     
    
    return EXIT_SUCCESS; }
    ieri ho provato un programma simile scrivendo in un file e andava bene ora volevo provare a leggere dei valori ma questo programma non mi da nessun print?
    nel debug mi dice:

    [Warning] passing arg 1 of `fscanf' from incompatible pointer type
    [Warning] passing arg 2 of `fscanf' from incompatible pointer type


    altra domanda fopen va bene anche per aprire un database.db e poter far delle operazioni con sqlite(che poi sarebbe il mio obbiettivo finale)?? perchè per ora ho sempre trovato solo file di testo

    P.S. sto usando C anche perchè non riuscirei in tempo a studiarmi anche c++

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: chiarimenti su fopen, fprintf, fscanf

    Ti consiglio di rileggere attentamente la documentazione delle funzioni in questione. Penso che volessi scrivere qualcosa del genere (ometto, per semplicità, il controllo degli errori):

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
        int a, b, c;
        FILE *f;
    
        f = fopen("prova.txt", "r");
        fscanf(f, "%d", &a);
        fscanf(f, "%d", &b);
        fclose(f);
        c = a + b;
        printf("il risultato è %d \n", c);
        system("PAUSE");
    
        return EXIT_SUCCESS;
    }
    supponendo che il contenuto del file abbia un formato del tipo:

    codice:
    <primo_addendo> <secondo_addendo>
    e.g.

    codice:
    12 34
    altra domanda fopen va bene anche per aprire un database.db e poter far delle operazioni con sqlite(che poi sarebbe il mio obbiettivo finale)?? perchè per ora ho sempre trovato solo file di testo
    le funzioni di I/O su file della libreria standard (cioè quelle di cui parliamo e altre ancora) ti consentono di eseguire operazioni su qualsiasi tipo di file, ma chiaramente in maniera rudimentale: si tratta di funzioni generiche con le quali puoi eseguire semplici operazioni di lettura/scrittura e poco altro, non hanno la minima coscienza del file su cui operano, accedono ai byte e basta.
    Se devi eseguire operazioni ad un livello più alto su un file sqlite, la cosa più logica da fare è ricorrere all'apposita libreria
    http://www.sqlite.org/
    e all'API C/C++ che espone. La cosa meno logica sarebbe scriverti da solo tutte le funzioni di cui hai bisogno partendo da quelle di base per la gestione dei file in C (appunto fopen() e compagni), ma fallo solo se hai centinaia e centinaia di ore di tempo da buttare nella maniera più inutile possibile.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    110
    ok allora forse mi è sfuggito qualcosa, la versione del programma che mi hai dato è la prima che ho scritto io, ma mi restituiva il puntatore alla variabile c senza eseguire le operazioni, però andrò a vedere meglio la documentazione

    e comunque ho sbagliato anche il formato del file allora perchè io l'ho salvato così:

    codice:
    <primo elemento>
    <secondo elemento>
    per la seconda parte espongo meglio il problema, perchè vorrei capire se sto ragionando bene (e già avevo fatto un errore XD)

    io devo prendere dei dati da un file (.XSD anche se non penso cambi qualcosa il formato) e passarli al database sqlite, se ho capito bene
    per prendere i dati dal file posso usare fopen e compagnia
    poi posso usare direttamente le api di sqlite per accedere al database e operare giusto??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Magi13
    ok allora forse mi è sfuggito qualcosa, la versione del programma che mi hai dato è la prima che ho scritto io, ma mi restituiva il puntatore alla variabile c senza eseguire le operazioni, però andrò a vedere meglio la documentazione
    Ovvio, dato che tu hai scritto

    printf("il risultato è %d \n", &c);

    mentre deve essere

    printf("il risultato è %d \n", c);

    ...se ho capito bene per prendere i dati dal file posso usare fopen e compagnia
    poi posso usare direttamente le api di sqlite per accedere al database e operare giusto??
    Sì ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Magi13
    ok allora forse mi è sfuggito qualcosa, la versione del programma che mi hai dato è la prima che ho scritto io, ma mi restituiva il puntatore alla variabile c senza eseguire le operazioni, però andrò a vedere meglio la documentazione

    e comunque ho sbagliato anche il formato del file allora perchè io l'ho salvato così:

    codice:
    <primo elemento>
    <secondo elemento>
    per la seconda parte espongo meglio il problema, perchè vorrei capire se sto ragionando bene (e già avevo fatto un errore XD)
    Il codice che ti ho riportato sopra funzionerebbe anche in questo caso, in realtà. Sia gli spazi che i newline vengono scartati nella lettura, l'importante è non mettere altri caratteri nel mezzo: se gli addendi fossero separati da una virgola, ad esempio, non funzionerebbe, ma basterebbe ovviamente riadattare il programma.

    Originariamente inviato da Magi13
    io devo prendere dei dati da un file (.XSD anche se non penso cambi qualcosa il formato) e passarli al database sqlite, se ho capito bene
    per prendere i dati dal file posso usare fopen e compagnia
    poi posso usare direttamente le api di sqlite per accedere al database e operare giusto??
    Esatto. Chiaramente anche per la lettura di un XSD puoi ricorrere a qualche libreria apposita, per agire ad un livello più alto con un'API più specifica di quella della libreria di I/O standard del linguaggio C.
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    110
    grazie dei consigli

    io per agire sul file XSD pensavo di utilizare le XQuery con la libreria XQC
    può andare bene??

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