• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Brauche Hilfe in C++: Struct - Problem

Harlekin

Hobby-Spieler/in
Mitglied seit
18.12.2006
Beiträge
984
Reaktionspunkte
0
Schreiben morgen ne Arbeit in C++, und ich blicke es überhaupt nicht. Da es meinen Kollegen genauso geht, müsst ihr mir helfen. :)

Aufgabe:
Dem dem Program "x" sollen für max. 10 Lieferanten Informationen in einem Strukturarray erfasst werden.
Die Eingabe soll beendet werden, wenn 10 Eingaben gemacht wurden.
Nach der Eingabe soll dann alles Ausgegeben werden.

Das Besipiel im Buch bezieht sich nur auf ein bis zwei Datensätze, in der Arbeit sollen aber 100 Datensätze erfasst werden, deswegen vermute ich, dass man mit einer Schleife Arbeiten muss. Aber erstmal das Beispiel aus dem Buch:
Code:
//---------------------------------------------------------------------------

#include <string.h>
#include <iostream.h>
#include <conio.h>

//---------------------------------------------------------------------------

int main()
{
struct Kunde
{
	char Name[20];
	char Ort[20];
	double Umsatz;
	int Bonus;
	}K1[5];

   strcpy(K1[1].Name,"XYZ.AG");
   strcpy(K1[1].Ort,"Hamburg");
   K1[1].Umsatz = 3*17000;
   K1[1].Bonus = 2;

   cout <<K1[1].Name <<"  "<<K1[1].Ort <<endl;
   cout << "Bonus in EUR:  " <<K1[1].Umsatz * K1[1].Bonus / 100<<endl;

   strcpy(K1[2].Name,"ABC.AG");
   strcpy(K1[2].Ort,"Frankfurt");
   K1[2].Umsatz = 3*11000;
   K1[2].Bonus = 3;

   cout <<"-----------------------------------------------------" <<endl;
   cout <<K1[2].Name <<"  "<<K1[2].Ort <<endl;
   cout << "Bonus in EUR:  " <<K1[2].Umsatz * K1[2].Bonus / 100;

   getch();
	return 0;
}
//---------------------------------------------------------------------------


Ich hab mir bisher folgendes zusammengebastelt:
Code:
//----------------------------structure.cpp--------------------------------------

#include <string.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>

//------------------------------------------------------------------------------

int main()
{

 int = n;
	struct kunde k[10];
	{
		char Name[20];
		char Ort[20];
		double Umsatz;
		int Bonus;
//Am Ende der geschweiften Klammer wird die Variable, mit der die gesamte
//Struktur nachher angesprochen wird, festgelegt.
//Ein Aufruf der Struktur erfolgt also nicht über "Kunde", sondern über "k1, k2,...,kn".
	}k[];



	for  (n = 0; n == 99; n++)
		{
			strcpy(k[n].Name, "XYZ AG");
			strcpy(k[n].Ort, "Offebach");
			k[n].Umsatz = 3*17000;
			k[n].Bonus = 2;
			cout << k[n].Name << " " << k[n].Ort << endl;
cout << "Umsatz des Kunden: " << k[n].Umsatz << " / " << "Bonusstufe des Kunden: " << k[n].Bonus << endl;
cout << "Bonus in Euro: " << k[n].Umsatz * k[n].Bonus / 100 << endl ;
cout << endl;
		}

getch();
return 0;
}

Wie der Profi wohl erkennen kann, hab ich absolut 0 Plan wie ich das realisieren kann. Und die Eingabe funzt noch automatisch und nicht per Hand.

Wenn mir jemand kurz das Programm schreiben und erklären könnte. :X
 
struct kunde k[10];
{

}k[];
Bin jetzt nicht mit C++ so bewandert, aber damit haste doch noch kein richtiges Array angelegt. Wenn du es statisch machen willst, dann musst du in die eckigen Klammern die Anzahl der gewünschten reservierten Speicherplätze eingeben.
So hast du zwar das Array formal angelegt, aber keinen Speicher reserviert.

for (n = 0; n == 99; n++)
Geht das so überhaupt? Normalerweise würde man hier for (n = 0; n < 100; n++) schreiben. Die Schleife geht also von 0 bis 99.

Ich würde aber bei der Eingabe eine zusätzliche Abbruchbedingung einbauen, dass falls man zB als Namen "exit" eingibt, die Eingabe abgebrochen wird.

Hab mit C++ so jetzt keine Erfahrungen gesammelt. In C könnt ich dir das ja machen.
 
Onlinestate am 15.05.2008 15:33 schrieb:
Hab mit C++ so jetzt keine Erfahrungen gesammelt. In C könnt ich dir das ja machen.
hab das nochmal in nem C++ Forum gepostet und die haben im Grunde das selbe bemängelt wie du.

Das Programm sieht jetzt so aus:
Code:
//----------------------------structure.cpp--------------------------------------

#include <string.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <vector.h>
//------------------------------------------------------------------------------

int main()
{

    struct kunde
    {
        char Name[20];
        char Ort[20];
        double Umsatz;
        int Bonus;

    }k[10];

 int n; 
   
    for  (n = 0; n <10; n++)  
        {
            
            cout<<"Bitte geben Sie den Namen ein"<<endl;
            cin>>k[n].Name;           
            //strcpy(k[n].Name, "XYZ AG");
            
            cout<<"Bitte geben Sie den Ort ein"<<endl;
            cin>>k[n].Ort;        
            //strcpy(k[n].Ort, "Offebach");
            
            //cout<<"Bitte geben Sie den Umsatz ein"<<endl;
            //cin>>Umsatz;
            k[n].Umsatz = 3*17000;
            
            
            k[n].Bonus = 2;
            cout << k[n].Name << " " << k[n].Ort << endl;
cout << "Umsatz des Kunden: " << k[n].Umsatz << " / " << "Bonusstufe des Kunden: " << k[n].Bonus << endl;
cout << "Bonus in Euro: " << k[n].Umsatz * k[n].Bonus / 100 << endl ;
cout << endl;
        }

getch();
return 0;
}

Damit läufts jetzt auch in Dev-C++. Das mit der Abbruchsbedingung steht so auch in der Aufgabenstellung, aber das ist imo nicht so schwer (if else Anweisung). Sowas sollte ich dann auch noch hinbekommen. :-D

Aber danke. =)
 
Harlekin am 15.05.2008 17:23 schrieb:
Onlinestate am 15.05.2008 15:33 schrieb:
Hab mit C++ so jetzt keine Erfahrungen gesammelt. In C könnt ich dir das ja machen.
hab das nochmal in nem C++ Forum gepostet und die haben im Grunde das selbe bemängelt wie du.

Das Programm sieht jetzt so aus:
Code:
//----------------------------structure.cpp--------------------------------------

#include <string.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <vector.h>
//------------------------------------------------------------------------------

So auf den ersten Blick kannst du hier mindestens die string.h und die vector.h rauswerfen, wenn das wirklich das komplette Programm war was du gepostet hast. Die conio.h benutzt du auch nur für das getch() am Ende, wenn du einfach nur ne Pause haben willst kannst du auch nen
Code:
system("PAUSE");
setzen, dass wird aber von vielen als schlechter Programmierstil gesehen. Alternative wäre beispielsweise
Code:
cin.ignore(INT_MAX, '\n');
cin.get();
 
Iceman am 15.05.2008 17:52 schrieb:
Alternative wäre beispielsweise
Code:
cin.ignore(INT_MAX, '\n');
cin.get();
Ich stelle mal die Behauptung auf, dass das unser Lehrer nicht verstehen würde. :-D :S
Manchmal fragt man sich bei dem eh, ob der überhaupt noch irgendwas mitbekommt %)
 
Harlekin am 15.05.2008 17:59 schrieb:
Iceman am 15.05.2008 17:52 schrieb:
Alternative wäre beispielsweise
Code:
cin.ignore(INT_MAX, '\\n');
cin.get();
Ich stelle mal die Behauptung auf, dass das unser Lehrer nicht verstehen würde. :-D :S
Manchmal fragt man sich bei dem eh, ob der überhaupt noch irgendwas mitbekommt %)

Tja, dann bringt's sicher auch nichts, wenn Du Deinem Lehrer sagst, dass er euch hier C beibringt, das nur notdürftig in ein C++ Gewand gekleidet ist.

Wen wundert's da noch, dass alle über Fachkräftemangel im IT-Bereich jammern, wenn dem Nachwuchs nichts Vernünftiges beigebracht wird...
 
Zurück