Programmfehler



  • Hallo,

    ich versuche mir bei einer fernschule einblicke in C++/CLI zu verschaffen.
    hierfür muss ich Programme schreiben unter anderem ein Lagerprogramm (hier sind sie wieder die Kisten!!).
    Habe das auch soweit gemacht. Nur speichert mein Programm immer nur die letzte Kiste die eingegeben worden ist. Könnt Ihr mir einen Tipp geben ?
    Danke.

    #include "stdafx.h"

    using namespace System;

    struct kiste {
    Int32 kistenNummer;
    Int32 hoehe;
    Int32 breite;
    Int32 laenge;
    Int32 volumen;
    };

    //Neue Funktion zum einlesen der Kisten
    void einlesen(kiste kleineKiste[])
    {
    //Vereinbarung einer Variable
    Int32 eingabe, datensatz;
    Boolean gefunden = false;

    //Einlesen der "wunsch" nummer
    Console::Write("Geben Sie die Nummer der Kiste ein: ");
    eingabe = Convert::ToInt32(Console::ReadLine());

    //Durchlauf aller kistennummer und suche ob vorhanden
    for(Int32 i = 0; i < 100; ++i){
    if(eingabe == kleineKiste[i].kistenNummer) {
    datensatz = i;
    gefunden = true;
    break;
    }
    }

    //Wenn ja
    if (gefunden==false){

    kleineKiste[datensatz].kistenNummer=eingabe;

    Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine());
    Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine());
    Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine());
    kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge;
    //eine leere Zeile ausgeben
    Console::WriteLine();

    }
    else
    Console::WriteLine("Die Kiste ist schon vorhanden.");

    }

    //Funktion zum Ändern
    void aendern(kiste kleineKiste[])
    {
    //Vereinbarung einer Variable
    Int32 eingabe, datensatz;
    Boolean gefunden = false;

    //Einlesen der "wunsch" nummer
    Console::Write("Geben Sie die Nummer der Kiste ein: ");
    eingabe = Convert::ToInt32(Console::ReadLine());

    //Durchlauf aller kistennummer und suche ob vorhanden
    for(Int32 i = 0; i < 100; ++i){
    if(eingabe == kleineKiste[i].kistenNummer) {
    datensatz = i;
    gefunden = true;
    break;
    }
    }

    //Wenn ja
    if (gefunden==true){
    Console::Write("Geben Sie die neue Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine());
    Console::Write("Geben Sie die neue Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine());
    Console::Write("Geben Sie die neue Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine());
    //eine leere Zeile ausgeben
    Console::WriteLine();
    }
    else

    Console::WriteLine("Die Kiste ist nicht vorhanden");

    }
    // Löschen einer Kiste
    void loeschen(kiste kleineKiste[]) {
    //Vereinbarung einer Variable
    Int32 eingabe, datensatz;
    Boolean gefunden = false;

    //Einlesen der "wunsch" nummer
    Console::Write("Geben Sie die Nummer der Kiste ein: ");
    eingabe = Convert::ToInt32(Console::ReadLine());

    //Durchlauf aller kistennummer und suche ob vorhanden
    for(Int32 i = 0; i < 100; ++i){
    if(eingabe == kleineKiste[i].kistenNummer) {
    datensatz = i;
    gefunden = true;
    break;
    }
    }

    //Wenn ja Datensatz auf 0 setzen/löschen sonst meldung
    if(gefunden == true){
    kleineKiste[datensatz].kistenNummer = 0;
    Console::WriteLine("Kiste erfolgreich gelöscht!");
    }
    else
    Console::WriteLine("Dieses Kiste gibt es nicht!");
    }

    void anzeigen(kiste kleineKiste[])
    {
    Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen");
    for(Int32 i = 0; i < 4; ++i){
    if(kleineKiste[i].kistenNummer != 0)
    Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[i].kistenNummer, kleineKiste[i].breite, kleineKiste[i].hoehe, kleineKiste[i].laenge, kleineKiste[i].volumen);
    }
    }

    void anzeigenEi(kiste kleineKiste[])
    {
    //Vereinbarung einer Variable
    Int32 eingabe, datensatz;
    Boolean gefunden = false;

    //Einlesen der "wunsch" nummer
    Console::Write("Geben Sie die Nummer der Kiste ein: ");
    eingabe = Convert::ToInt32(Console::ReadLine());

    //Durchlauf aller kistennummer und suche ob vorhanden
    for(Int32 i = 0; i < 100; ++i){
    if(eingabe == kleineKiste[i].kistenNummer) {
    datensatz = i;
    gefunden = true;
    break;
    }
    }
    if(eingabe==kleineKiste[datensatz].kistenNummer){
    Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen");
    //for(Int32 i = 0; i < 100; ++i){
    //if(kleineKiste[i].kistenNummer != 0)
    Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[datensatz].kistenNummer, kleineKiste[datensatz].breite, kleineKiste[datensatz].hoehe, kleineKiste[datensatz].laenge, kleineKiste[datensatz].volumen);
    }
    else
    Console::WriteLine("Dieses Kiste gibt es nicht!");

    }

    int main(array<System::String ^> ^args)
    {
    //Vereinbarung einer Strukturvariable mit 100 Elementen
    kiste kleineKiste[100];
    //Vereinbarung einer Char Variable
    Char funktionAuswahl;

    Console::WriteLine(" Auswahl der Funktionen");
    Console::WriteLine(" a Eingabe der Daten für die Kisten");
    Console::WriteLine(" b Loeschen einer Kiste");
    Console::WriteLine(" c Ändern der Daten für die Kisten");
    Console::WriteLine(" e Anzeigen der Daten einer Kiste");
    Console::WriteLine(" d Alle Kisten anzeigen");
    Console::WriteLine(" q Programmende");

    //Das einlesen der Daten über die Funktion einlesen

    //for (Int32 i=0; i<100; i++)
    //kleineKiste[i]=einlesen(i+1);

    //Alle Elemente auf "NULL" bringen!
    for(Int32 i = 0; i < 100; ++i){
    kleineKiste[i].kistenNummer = 0;
    kleineKiste[i].hoehe = 0;
    kleineKiste[i].laenge = 0;
    kleineKiste[i].breite = 0;
    kleineKiste[i].volumen = 0;
    }

    // Die Auswahl der einzelnen Funktionen
    Console::WriteLine();
    do {
    Console::Write(" wählen Sie aus = ");

    //eine leere Zeile ausgeben
    Console::WriteLine();

    funktionAuswahl = Convert::ToChar(Console::ReadLine());

    switch (funktionAuswahl){
    case 'a':
    einlesen(kleineKiste);
    break;
    case 'b':
    loeschen(kleineKiste);
    break;
    case 'c':
    aendern(kleineKiste);
    break;
    case 'd':
    anzeigen(kleineKiste);
    break;
    case 'e':
    anzeigenEi(kleineKiste);
    break;
    case 'q':
    Console::WriteLine("Programmende!");
    break;
    default:
    Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben");
    break;
    }
    }while(funktionAuswahl != 'q');

    return 0;
    }

    Eine Frage noch: Wie kann ich den Code besser einfügen (habe es hier mit STR+C und STRG+V gemacht).



  • schue04 schrieb:

    Eine Frage noch: Wie kann ich den Code besser einfügen (habe es hier mit STR+C und STRG+V gemacht).

    Schau Dir mal die lustigen Buttons unter den Smilies an, auf denen "C/C++", "Code" usw. draufsteht. Und editier Deinen Beitrag entsprechend, so wird sich das kein Mensch durchlesen.



  • #include "stdafx.h" 
    
    using namespace System; 
    
    struct kiste { 
    Int32 kistenNummer; 
    Int32 hoehe; 
    Int32 breite; 
    Int32 laenge; 
    Int32 volumen; 
    }; 
    
    //Neue Funktion zum einlesen der Kisten 
    void einlesen(kiste kleineKiste[]) 
    { 
    //Vereinbarung einer Variable 
    Int32 eingabe, datensatz; 
    Boolean gefunden = false; 
    
    //Einlesen der "wunsch" nummer 
    Console::Write("Geben Sie die Nummer der Kiste ein: "); 
    eingabe = Convert::ToInt32(Console::ReadLine()); 
    
    //Durchlauf aller kistennummer und suche ob vorhanden 
    for(Int32 i = 0; i < 100; ++i){ 
    if(eingabe == kleineKiste[i].kistenNummer) { 
    datensatz = i; 
    gefunden = true; 
    break; 
    } 
    } 
    
    //Wenn ja 
    if (gefunden==false){ 
    
    kleineKiste[datensatz].kistenNummer=eingabe; 
    
    Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine()); 
    Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine()); 
    Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine()); 
    kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge; 
    //eine leere Zeile ausgeben 
    Console::WriteLine(); 
    
    } 
    else 
    Console::WriteLine("Die Kiste ist schon vorhanden."); 
    
    } 
    
    //Funktion zum Ändern 
    void aendern(kiste kleineKiste[]) 
    { 
    //Vereinbarung einer Variable 
    Int32 eingabe, datensatz; 
    Boolean gefunden = false; 
    
    //Einlesen der "wunsch" nummer 
    Console::Write("Geben Sie die Nummer der Kiste ein: "); 
    eingabe = Convert::ToInt32(Console::ReadLine()); 
    
    //Durchlauf aller kistennummer und suche ob vorhanden 
    for(Int32 i = 0; i < 100; ++i){ 
    if(eingabe == kleineKiste[i].kistenNummer) { 
    datensatz = i; 
    gefunden = true; 
    break; 
    } 
    } 
    
    //Wenn ja 
    if (gefunden==true){ 
    Console::Write("Geben Sie die neue Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine()); 
    Console::Write("Geben Sie die neue Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine()); 
    Console::Write("Geben Sie die neue Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); 
    kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine()); 
    //eine leere Zeile ausgeben 
    Console::WriteLine(); 
    } 
    else 
    
    Console::WriteLine("Die Kiste ist nicht vorhanden"); 
    
    } 
    // Löschen einer Kiste 
    void loeschen(kiste kleineKiste[]) { 
    //Vereinbarung einer Variable 
    Int32 eingabe, datensatz; 
    Boolean gefunden = false; 
    
    //Einlesen der "wunsch" nummer 
    Console::Write("Geben Sie die Nummer der Kiste ein: "); 
    eingabe = Convert::ToInt32(Console::ReadLine()); 
    
    //Durchlauf aller kistennummer und suche ob vorhanden 
    for(Int32 i = 0; i < 100; ++i){ 
    if(eingabe == kleineKiste[i].kistenNummer) { 
    datensatz = i; 
    gefunden = true; 
    break; 
    } 
    } 
    
    //Wenn ja Datensatz auf 0 setzen/löschen sonst meldung 
    if(gefunden == true){ 
    kleineKiste[datensatz].kistenNummer = 0; 
    Console::WriteLine("Kiste erfolgreich gelöscht!"); 
    } 
    else 
    Console::WriteLine("Dieses Kiste gibt es nicht!"); 
    } 
    
    void anzeigen(kiste kleineKiste[]) 
    { 
    Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen"); 
    for(Int32 i = 0; i < 4; ++i){ 
    if(kleineKiste[i].kistenNummer != 0) 
    Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[i].kistenNummer, kleineKiste[i].breite, kleineKiste[i].hoehe, kleineKiste[i].laenge, kleineKiste[i].volumen); 
    } 
    } 
    
    void anzeigenEi(kiste kleineKiste[]) 
    { 
    //Vereinbarung einer Variable 
    Int32 eingabe, datensatz; 
    Boolean gefunden = false; 
    
    //Einlesen der "wunsch" nummer 
    Console::Write("Geben Sie die Nummer der Kiste ein: "); 
    eingabe = Convert::ToInt32(Console::ReadLine()); 
    
    //Durchlauf aller kistennummer und suche ob vorhanden 
    for(Int32 i = 0; i < 100; ++i){ 
    if(eingabe == kleineKiste[i].kistenNummer) { 
    datensatz = i; 
    gefunden = true; 
    break; 
    } 
    } 
    if(eingabe==kleineKiste[datensatz].kistenNummer){ 
    Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen"); 
    //for(Int32 i = 0; i < 100; ++i){ 
    //if(kleineKiste[i].kistenNummer != 0) 
    Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[datensatz].kistenNummer, kleineKiste[datensatz].breite, kleineKiste[datensatz].hoehe, kleineKiste[datensatz].laenge, kleineKiste[datensatz].volumen); 
    } 
    else 
    Console::WriteLine("Dieses Kiste gibt es nicht!"); 
    
    } 
    
    int main(array<System::String ^> ^args) 
    { 
    //Vereinbarung einer Strukturvariable mit 100 Elementen 
    kiste kleineKiste[100]; 
    //Vereinbarung einer Char Variable 
    Char funktionAuswahl; 
    
    Console::WriteLine(" Auswahl der Funktionen"); 
    Console::WriteLine(" a Eingabe der Daten für die Kisten"); 
    Console::WriteLine(" b Loeschen einer Kiste"); 
    Console::WriteLine(" c Ändern der Daten für die Kisten"); 
    Console::WriteLine(" e Anzeigen der Daten einer Kiste"); 
    Console::WriteLine(" d Alle Kisten anzeigen"); 
    Console::WriteLine(" q Programmende"); 
    
    //Das einlesen der Daten über die Funktion einlesen 
    
    //for (Int32 i=0; i<100; i++) 
    //kleineKiste[i]=einlesen(i+1); 
    
    //Alle Elemente auf "NULL" bringen! 
    for(Int32 i = 0; i < 100; ++i){ 
    kleineKiste[i].kistenNummer = 0; 
    kleineKiste[i].hoehe = 0; 
    kleineKiste[i].laenge = 0; 
    kleineKiste[i].breite = 0; 
    kleineKiste[i].volumen = 0; 
    } 
    
    // Die Auswahl der einzelnen Funktionen 
    Console::WriteLine(); 
    do { 
    Console::Write(" wählen Sie aus = "); 
    
    //eine leere Zeile ausgeben 
    Console::WriteLine(); 
    
    funktionAuswahl = Convert::ToChar(Console::ReadLine()); 
    
    switch (funktionAuswahl){ 
    case 'a': 
    einlesen(kleineKiste); 
    break; 
    case 'b': 
    loeschen(kleineKiste); 
    break; 
    case 'c': 
    aendern(kleineKiste); 
    break; 
    case 'd': 
    anzeigen(kleineKiste); 
    break; 
    case 'e': 
    anzeigenEi(kleineKiste); 
    break; 
    case 'q': 
    Console::WriteLine("Programmende!"); 
    break; 
    default: 
    Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); 
    break; 
    } 
    }while(funktionAuswahl != 'q'); 
    
    return 0; 
    }
    


  • Hallo

    void einlesen(kiste kleineKiste[])
    {
    	Int32 eingabe, datensatz;
    	Boolean gefunden = false;
    
    	Console::Write("Geben Sie die Nummer der Kiste ein: ");
    	eingabe = Convert::ToInt32(Console::ReadLine());
    
    	for(Int32 i = 0; i < 100; ++i)
    	{
    		if(eingabe == kleineKiste[i].kistenNummer)
    		{
    //Hier bekommt die variable datensatz von dir einen wert
    //aber nur wenn die kiste nicht vorhanden ist
    			datensatz = i;
    			gefunden = true;
    			break;
    		}
    	}
    	if (gefunden==false)
    	{
    //Hier nicht
    //also hat die variable datensatz einen zufälligen wert
    //hier allerdings 0 so das du immer in kleineKiste[0] schreibst
    		kleineKiste[datensatz].kistenNummer=eingabe;
    		Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    		kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine());
    		Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    		kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine());
    		Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
    		kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine());
    		kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge;
    		Console::WriteLine();
    	}
    	else
    	Console::WriteLine("Die Kiste ist schon vorhanden.");
    
    }
    

    Erstmal als kleiner Denkanstoss.
    Ich mach auch den Kurs und hab das ganze noch etwas anders gelöst da es laut der Aufgabe glaube ich dir überlassen ist wie du die kleineKiste[].kistenNummer verteilst.
    So war bei mir dann immer kiste[0] die erste, kiste[1] die zweite und so weiter.
    So kann man sich die Schleife sparen wo man alle 100 kisten nach der nummer durchsuchen muss. 🙂

    void einlesen(kiste kleineKiste[])
    {
    	Int32 eingabe, datensatz;
    	Boolean gefunden = false;
    
    	Console::Write("Geben Sie die Nummer der Kiste ein: ");
    	eingabe = Convert::ToInt32(Console::ReadLine());
    
    		if(kleineKiste[eingabe-1].kistenNummer!=0)
    		{
    			Console::WriteLine("Die Kiste ist schon vorhanden.");
    		}
    		else
    		{
    			kleineKiste[eingabe-1].kistenNummer=eingabe;
    			Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer);
    			kleineKiste[eingabe-1].hoehe=Convert::ToInt32(Console::ReadLine());
    			Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer);
    			kleineKiste[eingabe-1].breite=Convert::ToInt32(Console::ReadLine());
    			Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer);
    			kleineKiste[eingabe-1].laenge=Convert::ToInt32(Console::ReadLine());
    			kleineKiste[eingabe-1].volumen=kleineKiste[eingabe-1].hoehe * kleineKiste[eingabe-1].breite * kleineKiste[eingabe-1].laenge;
    			Console::WriteLine();
    		}
    
    }
    

    Das sollte als Tip erstmal reichen.
    Viel Spass beim basteln 😃

    Edit: Achso mein erster Post,
    Hallo an alle ich bin der neue 🕶

    Tschüss


Anmelden zum Antworten