Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] Array di struct

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    3

    [C] Array di struct

    Buonasera a tutti,

    mi sono appena registrato, seguo questo forum da parecchio tempo per le varie guide, ma ora ho bisogno del vostro aiuto! Sto implementando un programma in C che debba scrivere su file un array di struct. Il problema è il seguente:
    se utilizzo fwrite viene scritto un solo array e anche male sul file e tutto su una riga, mentre se utilizzo fprint la scrittura viene formattata ma ho problemi nel ricercare un elemento.

    Grazie in anticipo.

    Questo è il codice dei 3 moduli del programma.
    main.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "cerca.h"
    #include "marcatore.h"
    #include "menu.h"
    //#include "lettura.h"
    #define N 100
    calciatore inserisci_marcatore(FILE *fp);
    void cerca(FILE *fp, calciatore marcatore[N]);
    int menu(void);
    //void lettura(FILE *fp);
    calciatore marcatore[N];
    int main() {
     FILE *fp;
     int scelta;
     if ((fp = fopen("calcio.txt", "ab+")) == NULL) {
      printf("Il File non può essere aperto");
     }
     else {
      while ((scelta = menu()) != 4) {
       switch (scelta) {
       case 1:
        marcatore[N] = inserisci_marcatore(fp);
        break;
       case 2:
        cerca(fp,marcatore);
        break;
       case 3:
        break;
       default:
        break;
       }
      }
     }
     return 0;
    }

    marcatore.h
    codice:
    #define N 100
    typedef struct { 
     char nome[20], cognome[20], squadra[20];
     int goal; 
    }calciatore;
    
    calciatore inserisci_marcatore(FILE *fp) {
     int i, n;
     calciatore marcatore[N];
     if ((fp = fopen("calcio.txt", "rb+")) == NULL) {
      printf("Il file non esiste");
     }
     else {
      fprintf(fp, "%-19s%-23s%-23s%4s", "Nome", "Cognome", "Squadra", "Goal\n");
      printf("Inserire numero marcatori:");
      scanf("%d", &n);
      for (i = 0; i < n; i++) {
       printf("Inserire nome del marcatore:\n");
       scanf("%s", marcatore[i].nome);
       printf("Inserire cognome del marcatore:\n");
       scanf("%s", marcatore[i].cognome);
       printf("Inserire squadra di appartenenza:\n");
       scanf("%s", marcatore[i].squadra);
       printf("Inserire numero di goal segnati:\n");
       scanf("%d", &marcatore[i].goal);
      }
      for (i = 0; i < n; i++) {
       printf("Prova stampa: marcatore[%d] Nome:%s Cognome:%s Squadra:%s Goal:%d\n", i, marcatore[i].nome, marcatore[i].cognome, marcatore[i].squadra, marcatore[i].goal);
       /*fprintf(fp, "%-19s%-23s%-23s%4d\n", marcatore[i].nome,
         marcatore[i].cognome, marcatore[i].squadra,
         marcatore[i].goal);*/
       fwrite(&marcatore, sizeof(calciatore), 1, fp);
       fseek(fp, sizeof(calciatore), SEEK_CUR);
      }
    
     }
     fclose(fp);
     return(marcatore[N]);
    }
    cerca.h
    codice:
    #include "marcatore.h"
    #define N 100 
    void cerca(FILE *fp, calciatore marcatore[N]) {
     if ((fp = fopen("calcio.txt", "rb+")) == NULL) {
      printf("Il File non può essere aperto");
     } else {
      int flag = 0,i;
      char cercaCognome[20];
      calciatore marcatore[N];
      printf("Inserisci il cognome del calciatore da cercare\n");
      scanf("%s", cercaCognome);
      while (fread(marcatore,sizeof(calciatore), 1, fp)!=0) {
       for (i = 0; i <N; i++{
       fscanf(fp,"%s",marcatore[i].cognome);
        //fseek(fp, sizeof(calciatore), SEEK_SET);
        if ((strcmp(cercaCognome, marcatore[i].cognome)) == 0) {
         flag = 1;
        printf("ECCO IL CALCIATORE CERCATO:");
          printf("Cognome: %s\n", marcatore[i].cognome);
          printf("Squadra: %s\n", marcatore[i].squadra);
          printf("Numero di goal segnati: %d\n", marcatore[i].goal);
        }
        else{
        if (flag == 0) {
         printf(
           "Non esiste nessun calciatore con questo cognome.\n");
        }
        }
       }
      }
     }
     fclose(fp);
    }
    Ultima modifica di Nort; 05-04-2017 a 15:12

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.