Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C/C++]comportamento strano fwrite+struct

    Ciao a tutti,
    il mio problema una semplice fwrite:
    Codice PHP:
    fwrite(&lib,sizeof(libro),1,p); 
    dove &lib
    Codice PHP:
    struct libro
        
    {
            
    char nome[20], autore[20];
        };
        
    libro lib
    cos com' nel file mi ritrovo: 獡慤摳찀쳌쳌쳌쳌쳌쳌摡獡慤摳찀쳌쳌쳌쳌쳌
    giappocinese

    per se metto un 2 al posto dell'1 cio
    Codice PHP:
    fwrite(&lib,sizeof(libro),2,p); 
    risultato: nome autore ̰B  YI@  `D
    D $  p

    credo che debba stamparmi solo: nome autore
    che sono 40byte

    potete aiutarmi??

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Ci fai vedere tutto il programma?

  3. #3
    Certo, eccolo
    Codice PHP:
    #include<stdio.h>
    #include<iostream.h>
    void main()
    {
        
    FILE *p;
        
    struct libro
        
    {
            
    char nome[20], autore[20];
        };
        
    libro lib;

            
    cout<<"Inserisci il nome"<<endl;
            
    cin>>lib.nome;
            
    cout<<"Inserisci l'autore"<<endl;
            
    cin>>lib.autore;

        
    p=fopen("prova.txt","w");
        if(
    p==NULL)
        
    cout<<"errore"<<endl;

            
    fwrite(&lib,sizeof(libro),2,p);

        
    fclose(p);

    grazie dell'attenzione

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Se metto 1, come dovrebbe essere, ottengo

    nome autore

    Quale compilatore usi?

  5. #5
    Originariamente inviato da oregon
    Se metto 1, come dovrebbe essere, ottengo

    nome autore

    Quale compilatore usi?
    Microsoft Visual C++ 6.0

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Ho provato con quello e inserendo

    fwrite(&lib,sizeof(libro),1,p);

    e' tutto come ti dicevo.

    Quando fai la prova, prima elimina il vecchio file .txt

  7. #7
    Niente, ho anche provato a creare un nuovo progetto, mi stampa 慡慡찀쳌쳌쳌쳌쳌쳌쳌摤摤찀쳌쳌쳌쳌쳌쳌쳌

  8. #8
    Ora ho provato con Bloodshed Dev-C++ e il risultato
    nome " \wp wautore w?= P?= 
    e sono 40byte quindi credo che sia giusto, il problema non del codice in s

    vabb grazie mille

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Che ci sia "sporcizia" dopo i dati e' corretto (dato che non hai inizializzato lo spazio usato dalle stringhe).

    Quello che deve sempre essere e' che, se indichi 1, devono esserci 40 byte ...

    Se vuoi, puoi scrivere

    memset(&lib, 0, sizeof(libro));

    prima di inserire i dati.

  10. #10
    (wow 10000 messaggi, complimenti )
    Alla fin fine mi serviva per fare un prog che scriveva nel file un vettore di struct e poi lo rileggieva dicendo quante struct c'erano scritte

    il programma funziona, infatti mi riscrive i dati giusti e mi riconosce le struct, ma nel file prova.txt: 摳獡慤촀췍췍췍췍췍췍敱睱煥w췍췍췍췍췍췍瑥牲瑥敲촀췍췍췍췍췍摦晧杤摦촀췍췍췍췍췍
    ancora giappocinese :quote:
    eppure se faccio partire solo la parte di lettura, funziona

    il prog completo:
    Codice PHP:
    #include<stdio.h>
    #include<iostream.h>
    void main()
    {
        
    int libri;
        
    FILE *p;
        
    struct libro
        
    {
            
    char nome[20], autore[20];
        };
        
    struct libro *lib;
        
    cout<<"Quanti libri vuoi?"<<endl;
        
    cin>>libri;
        
    lib=new libro[libri];
        for(
    int i=0;i<libri;i++)
        {
            
    cout<<"Inserisci il nome"<<endl;
            
    cin>>lib[i].nome;
            
    cout<<"Inserisci l'autore"<<endl;
            
    cin>>lib[i].autore;
        }
        
    p=fopen("prova.txt","w");
        if(
    p==NULL)
        
    cout<<"errore"<<endl;
        for(
    i=0;i<libri;i++)
        {
            
    fwrite(&lib[i],sizeof(libro),1,p);
        }
        
    fclose(p);

        
    p=fopen("prova.txt","r");
        if(
    p==NULL)
        
    cout<<"errore"<<endl;
        
    i=0;
        while (!
    feof(p))
        {
            
    fread(&lib[i],sizeof(libro),1,p);
            if(
    feof(p)!=0)
            break;
            
    cout<<lib[i].nome<<" - "<<lib[i].autore<<endl;
            
    i++;
        }

        
    cout<<"\nNumero di struct: "<<i<<endl;
        
    fclose(p);


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