Salve
e' il mio primo post su questo splendido forum che ho scoperto per caso nei meandri di internet, diciamo che gia leggendo e utilizzando la funzione cerca ho scoperto molte cose che mi han portato a migliorare molto la mia conoscenza del C.
Mi ritrovo di fronte a questo problema di cui posto il PDF essendo la traccia troppo lunga.
Ho risolto approssimativamente il compito assegnato tranne per un ultima parte, la stampa del "POSTO", sto impazzendo, non so ne come importare ne come stampare una stringa del tipo "A31", se la stampo come char *, mi sostituisce dei numeri con delle lettere, se la stampo come intero, mi sostituisce le lettere con i numeri, c'è un modo per gestire questa roba in C?
Questo e' il mio codice:
/*
* main.c
*
* Created on: 29/gen/2014
* Author: exSnake
*
*/
#include <stdlib.h>
#include <stdio.h>
#define COLONNE 4
#define MAX 50
typedef enum {true, false} boolean;
typedef struct {
int data[MAX];
int ora[MAX];
int sett[MAX];
char posto[MAX];
}biglietti;
typedef struct {
int settore[MAX];
float prezzo[MAX];
}settori;
int Leggi_biglietti(biglietti *);
int Leggi_settori(settori *);
void Biglietti_venduti(biglietti *, settori *, int, int);
int main(){
biglietti vett[MAX];
settori v1[MAX];
int num_biglietti, num_settori;
num_biglietti = Leggi_biglietti(vett);
num_settori = Leggi_settori(v1);
Biglietti_venduti(vett, v1, num_biglietti, num_settori);
return EXIT_SUCCESS;
}
int Leggi_biglietti(biglietti tickets[]){
FILE * fp;
char file[MAX];
int i=0;
printf("Inserisci il nome del file contenente i biglietti venduti");
scanf("%s", file);
if ( (fp = fopen(file, "r")) == NULL){
printf("Impossibile aprire il file");
return EXIT_FAILURE;
}
while(!feof(fp) && i<MAX){
fscanf(fp, "%d", &tickets->data[i]);
fscanf(fp, "%d", &tickets->ora[i]);
fscanf(fp, "%d", &tickets->sett[i]);
fscanf(fp, "%s", &tickets->posto[i]);
i++;
}
fclose(fp);
return i;
}
int Leggi_settori(settori * sector){
FILE *fp;
int i=0;
if ( (fp = fopen("settori.txt", "r")) == NULL){
printf("Impossibile aprire il file");
return EXIT_FAILURE;
}
while(!feof(fp) && i<MAX){
fscanf(fp, "%d", §or->settore[i]);
fscanf(fp, "%f", §or->prezzo[i]);
i++;
}
fclose(fp);
printf("Numero settori: %d\n", i);
getchar(); getchar();
return i;
}
void Biglietti_venduti(biglietti * tickets, settori * sector, int n_b, int n_s){
int i, j, biglietti_venduti=0, trovato;
float somma=0;
printf("Numero settori: %d, numero biglietti: %d", n_s, n_b);
for (i=0; i<n_b; i++){
j=0; trovato=false;
while(j<n_s && trovato == false){
if (tickets->sett[i] == sector->settore[j]){
somma += sector->prezzo[j];
biglietti_venduti ++;
trovato=true;
}
j++;
}
if (trovato == false){
printf("*** Biglietto numero settore %d posto %s non valido\n\n", tickets->sett[i], &tickets->posto[i]);
}
}
printf("- Biglietti venduti %d\n"
"- Ricavo Euro: %.2f", biglietti_venduti, somma);
}
Sono ben accetti consigli su come migliorarlo e su errori notati.