|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
un aiuto per c++...
salve ragazzi...
ho cominciato da qualche mese a programmare in c++ per l'uni, ora sto facendo un programmino che possa gestire le funzioni di carico e scarico di un magazzino... (per ora solo carico ed aggiornamento) il problema (vd allegato) è che non riesco a far funzionare il ciclo while per l'estrazione dei campi... qualcuno mi può dare una mano? grazie a tutti per la disponibilità e la gentilezza... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
PERFAVORE... dammi quattromila euro...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
proprio nessuno?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
aiuto...
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Quote:
perchè non posti la parte del codice che non ti funge? (oltre a spiegarci la storia dei 4000 euri!!)
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
questo è tutto il codice...
per i quattromila euro, non vedi colorado cafè?(era un modo per uppare...) #include <iostream.h> #include <string.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> //struttura dati struct Data { }; typedef struct articolo { char nomearticolo [41]; char kg [6]; }ARTICOLO; //variabili gestione files ifstream fin; ofstream fout; char nomefile[100]; ///////////////////////////////////////////////////////////////////////////////////// int aggiungispazi (char stringa[], int caratteri); int cancellaspazi (char stringa[]); void main () { char buffer[47]; int i=0;//varaibile di verifica aggiornamento ARTICOLO newdato; ARTICOLO olddato; cout<<"inserisci il nome articolo: "; cin >>newdato.nomearticolo; cout<<endl; cout<<"inserisci i kg: "; cin >>newdato.kg; cout<<endl; //apertura file strcpy (nomefile,"dati.txt"); fin.open(nomefile); fout.open(nomefile,ios::out); if(fin.fail() || fout.fail()){ cout<<"errore"; } //esecuzione while (fin.getline(buffer,46)) { //estrazione campi da articolo strncpy (olddato.nomearticolo , buffer ,40); olddato.nomearticolo[40]='\0'; strncpy (olddato.kg ,buffer +41,5); olddato.kg[5]='\0'; //cancella spazi cancellaspazi (olddato.nomearticolo); cancellaspazi (olddato.kg); //converti kg in int double oldkg; oldkg=atof(olddato.kg); double newkg; newkg=atof(newdato.kg); double totkg; if (strcmp(olddato.nomearticolo,newdato.nomearticolo) == 0) { totkg=oldkg+newkg; i=1; sprintf ( olddato.kg , "%i", totkg ); cout<<"ciao2"; }//fine if //aggiungi spazi aggiungispazi (olddato.nomearticolo, 40); aggiungispazi (olddato.kg, 5); fout << olddato.nomearticolo << olddato.kg <<endl; }//fine while //chiusura file fin.close(); fout.close(); if (i!=1) { fout.open(nomefile,ios::app); //aggiungi spazi aggiungispazi (newdato.nomearticolo, 40); aggiungispazi (newdato.kg, 5); fout << newdato.nomearticolo << newdato.kg <<endl; fout.close(); }//fine if di aggiunta }//fine main //******************************************************** /* CANCELLA SPAZI */ int cancellaspazi (char stringa[]) { int i; for(i=strlen( stringa ); i > 0 ; i--){ if (stringa[i] == ' ') stringa[i] = '\0'; } return 0; } //******************************************************** /* AGGIUNGI SPAZI */ int aggiungispazi (char stringa[], int caratteri) { int i; for (i=strlen(stringa); i<caratteri;i++) { stringa [i]=' '; stringa[caratteri] = '\0'; } return 0; } |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Non ho ben capito il funzionamento del tuo programma ad ogni modo il ciclo while non verrà mai eseguito perchè l'istruzione:
fin.open(nomefile); cancella tutti i dati presenti nel file dati.txt . Se vuoi far si che i dati non vengano cancellati devi aggiungere il flag ios::app oppure aprire il file all' interno del ciclo while. Inoltre ho nontato che dichiari delle variabili all' interno del ciclo e questo potrebbe crearti dei problemi (una variabile deve essere dichiarata una sola volta). |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
l'ho modificato come dici ma non funziona...
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Il programma per come era perima non avrebbe mai funzionato e come ti ho detto non mi è ben chiaro cosa accade dentro il ciclo while. Potresti essere più dettagliato sul perchè non funziona il programma?
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
dovrebbe essere un piccolo programma per la gestione carico\scaico di un magazzino....
per ora ho implementato solo il carico: in pratica il prg chiede all'utente quale è la merce che deve caricare (cin), controlla che non sia gia presente in magazzino (ciclo while), se è presente aggiorna la quantità (somma), se no crea un nuovo record (fout). il problema è che non entra nel ciclo while... |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
dimenticavo...
grazie per l'aiuto |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Usando le modifiche che ti ho suggerito nella precedente risposta il programma entra nel ciclo while purchè esista un file non vuoto chiamato dati.txt( Per come è scritto il tuo programma sembrebbe che sia necessario avere gia questo file).
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 1179
|
scusa se sono un po' ottuso ma a me non funziona...
a te funziona? non è che puoi postare il codice? |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Oct 2003
Città: Umbertide
Messaggi: 180
|
Di seguito troverai il listato corretto però ricorda di creare il file dati.txt non vuoto è opportunamente formattato(nelle prime 40 colonne i nomi e nelle seguenti 5 i pesi):
#include <iostream.h> #include <string.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> //struttura dati struct Data { }; typedef struct articolo { char nomearticolo [41]; char kg [6]; }ARTICOLO; //variabili gestione files ifstream fin; ofstream fout; char nomefile[100]; ///////////////////////////////////////////////////////////////////////////////////// int aggiungispazi (char stringa[], int caratteri); int cancellaspazi (char stringa[]); int main () { char buffer[47]; int i=0;//varaibile di verifica aggiornamento ARTICOLO newdato; ARTICOLO olddato; cout<<"inserisci il nome articolo: "; cin >>newdato.nomearticolo; cout<<endl; cout<<"inserisci i kg: "; cin >>newdato.kg; cout<<endl; //apertura file strcpy (nomefile,"dati.txt"); fin.open(nomefile); fout.open(nomefile,ios::app); if(fin.fail() || fout.fail()){ cout<<"errore"; } //esecuzione double oldkg; double newkg; double totkg; while (fin.getline(buffer,46)) { //estrazione campi da articolo strncpy (olddato.nomearticolo , buffer ,40); olddato.nomearticolo[40]='\0'; strncpy (olddato.kg ,buffer +41,5); olddato.kg[5]='\0'; //cancella spazi cancellaspazi (olddato.nomearticolo); cancellaspazi (olddato.kg); //converti kg in int oldkg=atof(olddato.kg); newkg=atof(newdato.kg); if (strcmp(olddato.nomearticolo,newdato.nomearticolo) == 0) { totkg=oldkg+newkg; i=1; sprintf ( olddato.kg , "%i", totkg ); cout<<"\n"<<"ciao2"<<"\n"; }//fine if //aggiungi spazi aggiungispazi (olddato.nomearticolo, 40); aggiungispazi (olddato.kg, 5); cout <<olddato.nomearticolo << olddato.kg <<endl; }//fine while //chiusura file fin.close(); fout.close(); if (i!=1) { fout.open(nomefile,ios::app); //aggiungi spazi aggiungispazi (newdato.nomearticolo, 41); aggiungispazi (newdato.kg, 5); fout <<newdato.nomearticolo << newdato.kg <<endl; fout.close(); }//fine if di aggiunta }//fine main //******************************************************** /* CANCELLA SPAZI */ int cancellaspazi (char stringa[]) { int i; for(i=strlen( stringa ); i > 0 ; i--){ if (stringa[i] == ' ') stringa[i] = '\0'; } return 0; } //******************************************************** /* AGGIUNGI SPAZI */ int aggiungispazi (char stringa[], int caratteri) { int i; for (i=strlen(stringa); i<caratteri;i++) { stringa [i]=' '; stringa[caratteri] = '\0'; } return 0; } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:44.



















