Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] Errore scrittura file e crash durante la visualizzazione

    salve raga, in pratica sto lavorando con un array di struct ( per facilitarmi un po' nel progetto che sto facendo) e quando vado ad avviare il programma il primo problema e' che crea il file correttamente , ma non me lo tabula come dico io ( vorrei che mi uscissesse un cantante con le relative caratteristiche per riga ,ma e' come se non riconoscesse la \n), l altro problema e' che mi crasha durante la visualizzazione di tutta la struttura. Grazie per chi mi aiutera'
    codice:
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    //costanti
    #define maxautori 25
    #define maxvet 21
    
    
    
    
    //definisco la struttura autore
    typedef struct {
    
    
        int id;
        char nome[maxautori];
        char cognome[maxautori];
        char nazionalita[maxautori];
        char sesso[2];
        char musica[maxautori];
    
    
    }autori;
    
    
    int main ()
    {
    
    
    autori vettaut[maxvet]={
    
    
                    {1, "bob       ", "sinclair  ","francese","m","house\0"},
                    {2, "michael   ", "jackson   ","americana","m","pop\0"},
                    {3, "loredana  ", "berte'    ","italiana","m","rock\0"},
                    {4, "albano    ", "carrisi   ","italiana","m","leggera\0"},
                    {5, "tim       ", "bergling  ","svedese","m","house\0"},
                    {6, "tiziano   ", "ferro     ","italiana","m","pop\0"},
                    {7, "fabrizio  ", "tarducci  ","italiana","m","rap\0"},
                    {8, "david     ", "guetta    ","francese","m","elettronica\0"},
                    {9, "sfera     ", "ebbasta   ","italiana","m","trap\0"},
                    {10, "gue'     ", "pequeno   ","italiana","m","rap\0"},
                    {11, "vittorio ", "dimango   ","italiana","m","house\0"},
                    {12, "eros     ","ramazzotti ","italiana","m","pop\0"},
                    {13, "antonello", "venditti  ","italiana","m","leggera\0"},
                    {14, "fabrizio ", "deandre'  ","italiana","m","leggera\0"},
                    {15, "capo     ", "plaza",   "italiana","m","trap\0"},
                    {16, "dark     ", "pologang  ","italiana","m","trap\0"},
                    {17, "sonny    ", "skrillex  ","americano","m","elettronica\0"},
                    {18, "boys     ", "noize     ","tedesco","m","elettronica\0"},
                    {19, "fabio    ", "marracash ","italiana","m","rap\0"},
                    {20, "roger    ", "waters    ","inglese","m","rock\0"},
                    {21, "jimi     ", "hendrix   ","inglese","m","rock\0"}
    };
    int i;
    
    
        FILE *fp;
    
    
        fp=fopen("autori.dat","wb");
        if(fp==NULL)
        {
            printf("errore\n");
        }
        else
        for(i=0;i<maxvet;i++)
        {
            fprintf(fp,"\n\n %d \t %s \t %s \t %s \t %s \t %s\n\n",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);
    
    
    
    
        }
        fclose(fp);
    
    
    
    
    if((fp=fopen("autori.dat","rb"))==NULL) {
            printf("errore\n");
    }
    else
        for(i=0;i<maxvet;i++)
        {
            fscanf(fp,"%d %s %s %s %s %s",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);
            printf("%d %s %s %s %s %s \n",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);
            printf("*********************************************************************************************\n");
        }
        fclose(fp);
    
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Come ti è stato già detto in altro thread, i dati non si inseriscono con gli spazi né si usa il \0
    Ad esempio, la prima riga dovrebbe essere

    { 1, "bob", "sinclair","francese","m","house" },


    Inoltre, se usi fprintf/fscanf non devi aprire il file in binario, quindi non usare wb/rb ma semplicemente w e r

    Infine, il crash è causato dalla fscanf in cui il primo parametro deve essere il puntatore al campo

    fscanf(fp, "%d %s %s %s %s %s", &vettaut[i].id, vettaut[i].nome, vettaut[i].cognome, vettaut[i].nazionalita, vettaut[i].sesso, vettaut[i].musica);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    grazie per l aiuto, adesso funziona
    Ultima modifica di giacomo199817; 04-05-2018 a 16:07

Tag per questa discussione

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.