Ciao a tutti, non riesco a capire perchè non viene eseguito il seguente programma. Il compilatore non dà nessun errore ma quando eseguo, il terminale rimane scuro e non esegue neanche printf("CIAO"); subito dopo il main, inoltre una CPU arriva anche ad un utilizzo del 100% questo mi fa pensare che il programma viene eseguito ma le istruzioni non partono.
Sono in ambiente Linux ed utilizzo il seguente compilatore : gcc version 8.1.1 20180531 (GCC) .
Aiutatemi.
/* Confronto file transaziono e master */
#include <stdio.h>
struct acctData{
int acctNum;
char name[15];
float balance;
};
struct Transact{
int acctNum;
float amount;
};
void updateMaster(FILE *trans, FILE *old, FILE *new);
void unmatchedTransactions(FILE *trans, FILE *old);
int main(int argc, char **argv)
{
printf("CIAO");
FILE *ofPtr; // puntatore oldmast
FILE *tfPtr; // puntatore trans
FILE *nfPtr; // puntatore newmast
// apertura oldmast.dat
if ((ofPtr = fopen("oldmast.dat", "r")) == NULL)
puts("oldmast.dat could not be opened");
// apertura trans.dat
else if ((tfPtr = fopen("trans.dat", "r")) == NULL)
puts("trans.dat could not be opened");
// apertura newmast.dat
else if ((nfPtr = fopen("newmast.dat", "w")) == NULL)
puts("newmast.dat could not be opened");
else {
printf("CIAO");
printf("%s", "Updating master...");
updateMaster(tfPtr, ofPtr, nfPtr); // aggiorna master
printf("%s", "done!");
unmatchedTransactions(tfPtr, ofPtr); // visualizza transazioni senza match
// chiusura file utilizzati
fclose(ofPtr);
fclose(tfPtr);
fclose(nfPtr);
}
return 0;
}
// aggiornamento master
void updateMaster(FILE *trans, FILE *old, FILE *new)
{
struct acctData client = {0, "", 0.0}; // cliente vuoto di appoggio
struct Transact transact = {0, 0.0}; // transazione vuota di appoggio
while (!feof(old)) { // finchè ci sono record in oldmast.dat
// leggi un record
fscanf(old, "%d%s%f", &client.acctNum, client.name, &client.balance);
// ricerca transazione relativa al record
while(!feof(trans)) { // finchè ci sono record in trans.dat
fscanf(trans, "%d%f", &transact.acctNum, &transact.amount); // leggi dati transazione
if (transact.acctNum == client.acctNum) // trovata transazione corrispondente
client.balance += transact.amount; // aggiungi l'ammontare della transazione
} // fine transazioni
rewind(trans); // reimposta il puntatore all'inizio di trans.dat
// scrittura record su newmast.dat
fprintf(new, "%d %s %f", client.acctNum, client.name, client.balance);
}
}
void unmatchedTransactions(FILE *trans, FILE *old)
{
rewind(trans);
rewind(old);
int transCode, oldCode; // codici account per confronto
unsigned int match = 0; // match/unmatch transazione (false per default)
while(!feof(trans)) { // finchè ci sono record in trans.dat
// leggi un codice account da trans.dat
fscanf(trans, "%d", &transCode);
while (!feof(old)) { // finchè ci sono record in oldmast.dat
// leggi un codice account da oldmast.dat
fscanf(old, "%d", &oldCode);
if (oldCode == transCode) // se c'è una corrispondenza tra transazione e master
match = 1; // match = true
}
if (!match) // match non avvenuto
printf("Unmatched transaction record for account number: %d", transCode);
rewind(old); // imposta il puntatore a inizio file
}
}