Ciao a tutti, mi chiamo Gianluca, da poco mi sono affacciato alla programmazione e sto seguendo dei video tutorial su youtube per imparare a programmare in C++.Come ambiente utilizzo Microsoft Visual Studio 2019.
Ho un problema con un esercizio. Devo progettare un magazzino con l'utilizzo di file binari. Il mio problema è all'origine, ovvero nella creazione del magazzino, quindi del file binario contenente il catalogo dei prodotti. Qui sotto vi posto il codice:
#include <iostream>
#include <fstream>
#include <string>
#define pMax 1000
using namespace std;
void creaMagazzino();
struct prodotto
{
string nome;
string descrizione;
long codice=0;
long disponibilità=0;
long scortaMinima=0; // il minimo che deve essere venduta
long cancellato=0;
};
int main()
{
int scelta;
do {
system("CLS"); // funzione clear che ad ogni ciclo mi pulisce la console
cout << "\tMagazzino di Gianluca \t " << endl<<endl; // \t è l'istruzione di tabulazione
cout << "1 - Crea nuovo magazzino" << endl;
cout << "2 - Inserisci prodotto " << endl;
cout << "3 - Modifica prodotto " << endl;
cout << "4 - Cancella prodotto " << endl;
cout << "5 - Visualizza magazzino " << endl;
cout << "6 - Esci dal programma" << endl;
cout <<endl<< "Cosa vuoi fare?" << endl;
cin >> scelta;
switch (scelta)
{
case 1:
creaMagazzino();
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
break;
}
} while (scelta<1&&scelta>6);
cout << endl << "Grazie per avero usato il magazzino" << endl;
system("pause");
return 0;
}
void creaMagazzino()
{
prodotto p;
p.nome = "VUOTO";
p.descrizione = "VUOTO";
p.codice = -1;
p.disponibilità = -1;
p.scortaMinima = -1;
fstream f;
string nomeMagazzino;
string estensione ="mag";
cout << "Nome del magazzino da creare: " << endl;
cin >> nomeMagazzino;
string nomeFile=nomeMagazzino+"."+estensione;
f.open(nomeFile, ios::out || ios::binary);
for (long i = 0; i < pMax; i++)
{
89 f.seekp(i * sizeof(prodotto),ios::beg);
f.write((char*)& p, sizeof(prodotto));
}
f.close();
f.clear();
cout << endl << "File creato correttamente"<<endl;
}
Praticamente non mi crea il file binario nella cartella del progetto. Di errori Visual Studio non me ne segna, ma mi dà un avviso:
Avviso C26451 Overflow aritmetico: verrà usato l'operatore '*' su un valore a 4 byte e verrà eseguito il cast del risultato in un valore a 8 byte. Per evitare l'overflow, eseguire il cast del valore nel tipo più ampio prima di chiamare l'operatore '*' (io.2). Progetto_magazzino,
che si riferisce alla riga 89, ovvero a f.seekp(i*sizeof(prodotto),ios::beg).
Mi dice del cast, ma non ho capito esattamente dove lo devo fare.
So benissimo che è una domanda stupida, ma da ieri sto provando a trovare una soluzione e non ci sono riuscito. Qualcuno può darmi un aiuto? Grazie in anticipo dell'attenzione dell'eventuale risposta.
Gianluca