Warum funktioniert das nicht auch in einer Funktion?
-
Hallo Leute,
bin immer noch bei der "Lagerverwaltung" zu gang. Habe da eine Frage, die ich mir nicht beantworten kann. Irgendwas habe ich nicht so wirklich verstanden.
Meine Frage nach den verschiedenen Codes und deren Ausgabefenster.
1. Code, der korrekt aber ohne Funktionen läuft.
[cli]// Noch ein Versuch.cpp: Hauptprojektdatei. #include "stdafx.h" using namespace System; // Globale Struktur struct kiste { Double hoehe; Double breite; Double laenge; }; // Funktione eingeben kiste eingabe(Int32 artikelNr) { kiste groesse; Console::WriteLine("ArtikelNr.: {0}",artikelNr); //artikelNr = Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); Console::WriteLine(); Console::Write("Höhe: "); groesse.hoehe = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); Console::Write("Breite: "); groesse.breite = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); Console::Write("Länge: "); groesse.laenge = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); return groesse; } Double volumen(kiste groesse) { Double wert; wert = groesse.hoehe + groesse.breite + groesse.laenge; return wert; } int main(array<System::String ^> ^args) { kiste lager[5]; // Einlesen der Daten über Funktion Eingabe for ( Int32 artikelNr = 0; artikelNr < 2; artikelNr++ ) lager[artikelNr] = eingabe(artikelNr + 1 ); // Funktion Volumenberechnung und Listenausgabe. Console::WriteLine(" Arikel-Nr. | Höhe | Breite | Länge | Volumen "); Console::WriteLine("************************************************************* "); for ( Int32 artikelNr = 0; artikelNr < 2 ; artikelNr++ ) Console::WriteLine(" {0} | {1} | {2} | {3} | {4} \n" "_____________________________________________________________\n", artikelNr + 1, lager[artikelNr].hoehe, lager[artikelNr].breite,lager[artikelNr].laenge, volumen(lager[artikelNr])); Console::Read(); return 0; }
Ausgabefenster: ArtikelNr.: 1
Höhe: 2,2
Breite: 2,2
Länge: 2,2
ArtikelNr.: 2
Höhe: 3,3
Breite: 3,3
Länge: 3,3
Arikel-Nr. | Höhe | Breite | Länge | Volumen
*************************************************************
1 | 2,2 | 2,2 | 2,2 | 6,6
_____________________________________________________________2 | 3,3 | 3,3 | 3,3 | 9,9
_____________________________________________________________Ausgabe ist OK:
2. mit Funktionen:
// Mama Mia.cpp: Hauptprojektdatei. /*############################################################################ Einsendeaufgabe 4 ############################################################################*/ #include "stdafx.h" using namespace System; struct kiste { //Int32 artikelNr; Double laenge; Double breite; Double hoehe; }; /*###################### Funktion eingabe() ############################*/ kiste eingabe() { kiste maße; Int32 artikelNr=0; Console::WriteLine("Jetzt gib entlich eine Kiste ein!\n\n"); //maße.artikelNr = Convert::ToInt32(Console::ReadLine()); Console::WriteLine(); for(artikelNr = 0; artikelNr < 2; artikelNr++) { Console::WriteLine("ArtikelNr.:{0}\n\n",artikelNr+1); Console::Write("Länge:"); maße.laenge = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); Console::Write("Breite:"); maße.breite = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); Console::Write("Höhe:"); maße.hoehe = Convert::ToDouble(Console::ReadLine()); Console::WriteLine(); } return maße; } /*##################### Funktion Volumenberechnung() #####################*/ Double volumen(kiste maße) { Double wert; wert = maße.hoehe + maße.breite + maße.laenge; return wert; } Void liste(kiste lager[] ) { Console::WriteLine(" Arikel-Nr. | Höhe | Breite | Länge | Volumen "); Console::WriteLine("************************************************************* "); for (Int32 artikelNr = 1; artikelNr <= 2 ; artikelNr++ ) Console::WriteLine(" {0} | {1} | {2} | {3} | {4} \n" "-------------------------------------------------------------", artikelNr,lager[artikelNr].hoehe,lager[artikelNr].breite,lager[artikelNr].laenge,volumen(lager[artikelNr])); //return 0; } int main(array<System::String ^> ^args) { struct kiste lager[100]; Int32 auswahl; Console::WriteLine("Bitte geben Sie die entsprechende Nummer aus dem Menü ein.\n\n"); Console::WriteLine("1. Eingabe\n"); Console::WriteLine("2. Ausgabe\n"); Console::WriteLine("3. Ändern\n"); Console::WriteLine("4. Löschen\n"); Console::WriteLine("5. Listen Ausgabe\n"); Console::WriteLine("6. Programm Ende\n"); auswahl=Convert::ToInt32(Console::ReadLine()); switch ( auswahl ) { case 1: eingabe(); break; case 2: //ausgabe(); Console::WriteLine("Test Ausgabe"); break; case 3: //aendern(); Console::WriteLine("Test Ändern"); break; case 4: //loeschen(); Console::WriteLine("Test Löschen"); break; case 5: liste(lager); // Console::WriteLine("Test Lisenausgabe"); break; case 6: Console::WriteLine("Test Ende"); /*ende(); Console::Read(); return 0;*/ break; default: Console::WriteLine("Diese Aktion steht nicht zur Verfügung!"); } Console::ReadKey(); return 0; }
Ausgabe mit Funktion: Bitte geben Sie die entsprechende Nummer aus dem Menü ein.
1. Eingabe
2. Ausgabe
3. Ändern
4. Löschen
5. Listen Ausgabe
6. Programm Ende
5
Arikel-Nr. | Höhe | Breite | Länge | Volumen
*************************************************************
1 | 7,49666883251638E-315 | 9,31557508477549E-312 | 7,8
4330960992485E-308 | 7,84424191710021E-308
-------------------------------------------------------------
2 | 2,61005482289223E-312 | 1,43859145950954E-268 | 4,5
5211816758556E+127 | 4,55211816758556E+127
-------------------------------------------------------------Dabei wurden die selben Zahlen wie Oben eingegeben.
Was läuft da schief? Habe in diesem Ausgabeversuch die selben Zahlen eingegeben wie oben. warum gibt er mir nicht meine Struktur im Feld aus? Was habe ich da nicht verstanden? Muß ich die Eingabe-Funktion aufrufen? Warum funktioniert das in der Funktion main(), aber nicht, wenn ich einzelne Funktionen aufrufen will?
Gebe ich genau diesen Code for(artikelNr = 0; artikelNr < 2; artikelNr++)
lager[artikelNr] = eingabe(artikelNr +1); ein, bekomme ich folgende Fehlermeldung.1>------ Erstellen gestartet: Projekt: Mama Mia, Konfiguration: Debug Win32 ------
1> Mama Mia.cpp
1>Mama Mia.cpp(39): error C2664: 'eingabe': Konvertierung des Parameters 1 von 'int' in 'kiste []' nicht möglich
1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Angabe über "Hilfe" bringen mich auch kein Stück weiter. Verwirren mich nur noch mehr.
Danke Euch.
champman
-
Benutze nicht struct, sondern ref struct oder value struct!
struct alleine ist C++ und Du programmierst hier (vorwiegend) C++/CLI.Du mischtst C, C++ und C++/CLI! Und das in einem einzigen File! Ich verzweifle!
-
Beide Varianten ausprobiert, bringen Unmengen von Fehlermeldungen, die ich erst mal verarbeiten muss, um ansatzweise heraus zu bekommen, was der Compiler da zu nörgeln hat.
Werde wieder rein rufen.
Lieben Dank
champman
-
Habs mal hier her verschoben, da es vermutlich öfter kommt:
http://www.c-plusplus.net/forum/291527