Bestandsliste (Array und if-Anweisung)



  • Hallo Leute,
    ich bin noch ein Anfänger in C++ und brauche eure Hilfe.
    Ich möchte ein Programm schreiben, welches mir durch die Indexnummer des Arrays die Bestände der jeweiligen Produkte anzeigt. Wenn das Produkt fast oder komplett ausverkauft ist, soll es mich fragen ob ich das jeweilige Produkt bestellen oder nicht bestellen möchte.
    Ich habe zwei Probleme beziehungsweise zwei Fragen:

    1. Wieso werden die Anweisungen nicht richtig ausgeführt?

    2. Wie kann ich das so schreiben das man die Bestände nur durch die jeweiligen Zahlen abfragen kann?

    #include<iostream>
    int main()
    {
        int liste[3]={0,16,5};
        int liste2[3]={20,20,20};
        int eingabe;
        char eingabe2;
        
        std::cout<<"Artikelnummer eingeben: ";
        std::cin>>eingabe;
        if((eingabe>=0)&&(eingabe<=2))
      {
         if(liste[eingabe]==0)
        {
         
         std::cout<<"Keine Ware verfügbar!"
                   <<std::endl;         
         std::cout<<liste2[eingabe]-liste[eingabe]
                 <<"  Artikel bestellen J/N?: ";
         std::cin>>eingabe2;
         if(eingabe2=='J')
        {
    
         std::cout<<"Artikel wird bestellt";
    
        }
         if(eingabe2=='N')
        {
         std::cout<<"Artikel wird nicht bestellt";
        }
        }  
         else if((liste[eingabe])>0&&(liste[eingabe]<=10))
        {
         std::cout<<"Nur noch "<<liste[eingabe]
         <<"Artikel verfügbar"<<std::endl;
                    
         std::cout<<liste2[eingabe]-liste[eingabe]
                  <<"  Artikel bestellen J/N?: ";
         std::cin>>eingabe2;
         if(eingabe2=='J')
    
        {
         std::cout<<"Artikel wird bestellt";
    
        }
         if(eingabe2=='N')                  
        {
         std::cout<<"Artikel wird nicht bestellt";        
        }
        
         else
        {
         std::cout<<"Es sind noch "
         <<liste[eingabe]<<" Artikel verfügbar";
        }
      }
         else
        {
         std::cout<<"Falsche Artikelnummer"; 
        }
        }
    }
    

    Ich würde mich sehr freuen, wenn man mir helfen könnte 🙂



  • Schreibe bitte in eine Zeile vor Deinen Code ``` und in eine Zeile nach Deinem Code ```. Alternativ markiere den Code und klicke auf das </> in der Symbolleiste über dem Bearbeitungsfenster. Du kannst Deinen Beitrag nachträglich bearbeiten. Den Menüpunkt "Bearbeiten" findest Du hinter dem Drei-Punkte-Menü rechts unter Deinem Beitrag.


    @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Wieso werden die Anweisungen nicht richtig ausgeführt?

    Wie kommst Du auf die Idee daß irgendetwas "nicht richtig" (was heißt das?) ausgeführt wird?

    Eventuell hilft Dir https://tty1.net/smart-questions_de.html



  • @Swordfish
    Vielen Dank für den Tipp 👍.

    Es werden nicht exakt die Sachen ausgeführt die in den geschweiften Klammern stehen, sondern z.B. wenn ich die Zahl 0 eingebe kommt zwar die Frage ob ich die 20 Artikel bestellen möchte, aber wenn ich als Antwort J oder N eingebe, wird mir nicht nur angezeigt Artikel wird bestellt/nicht bestellt, sondern auch die Meldung Falsche Artikelnummer.



  • @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Es werden nicht exakt die Sachen ausgeführt die in den geschweiften Klammern stehen

    Doch, werden sie. Vielleicht möchtest Du in Zeile 32 ein else if statt einem if haben.

    Du würdest Dir sicher leichter tun wenn Du Deinen Code ordentlich einrückst.



  • @Swordfish
    Das Problem nach der Eingabe von Zahl 1 und 2 als Artikelnummer besteht leider immer noch. Bei 1 gibt er Falsche Artikel Nummer aus, obwohl das Programm Es sind noch 16 Artikel verfügbar ausgeben soll und mich fragen soll, ob ich 4 Artikel bestellen möchte. Bei 2 gibt er nach J Artikel wird bestelltEs sind noch 5 Artikel verfügbar aus, obwohl es nur Artikel wird bestellt ausgeben soll. Also alle If-Anweisungen außer die allererste sollen mich fragen, ob ich bestellen möchte oder nicht.



  • @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Bei 1 gibt er Falsche Artikel Nummer aus, obwohl das Programm Es sind noch 16 Artikel verfügbar ausgeben soll und mich fragen soll, ob ich 4 Artikel bestellen möchte.

    Die Bedingung in Zeile 11 gibt für eingabe gleich 1 true. Zeile 13 (liste[eingabe] == 0) gibt false (list[1] ist 16). Zeile 32 ((liste[eingabe]) > 0 && (liste[eingabe] <= 10)) gibt auch false, also bleibt der else-Zweig (std::cout << "Falsche Artikelnummer";) übrig.

    @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Bei 2 gibt er nach J Artikel wird bestelltEs sind noch 5 Artikel verfügbar aus, obwohl es nur Artikel wird bestellt ausgeben soll. Also alle If-Anweisungen außer die allererste sollen mich fragen, ob ich bestellen möchte oder nicht.

    Dann tu das else beginnend in Zeile 51 weg??



  • @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Also alle If-Anweisungen außer die allererste sollen mich fragen, ob ich bestellen möchte oder nicht.

    Ich weiß nicht genau was Du willst.

    #include <cstddef>
    #include <cstdlib>
    #include <iterator>
    #include <iostream>
    
    struct artikel_t {
    	unsigned mindestbestand;
    	unsigned bestand;
    };
    
    int main()
    {
    	artikel_t artikel[]{
    		{ 20,  0 },
    		{ 20, 16 },
    		{ 20,  5 }
    	};
    
    	std::cout << "Artikelnummer eingeben: ";
    	std::size_t artikelnummer;
    	std::cin >> artikelnummer;
    
    	if (artikelnummer >= std::size(artikel)) {
    		std::cerr << "Ungueltige Artikelnummer :(\n\n";
    		return EXIT_FAILURE;
    	}
    
    	if (artikel[artikelnummer].bestand >= artikel[artikelnummer].mindestbestand) {
    		std::cout << "Es sind " << artikel[artikelnummer].bestand << " Stueck verfuegbar.\n\n";
    		return EXIT_SUCCESS;
    	}
    
    	if (!artikel[artikelnummer].bestand)
    		std::cout << "Keine Ware verfuegbar!\n";
    	else {
    		if (artikel[artikelnummer].bestand <= 10)
    			std::cout << "Nur noch ";
    		std::cout << artikel[artikelnummer].bestand << " Stueck verfuegbar.\n";
    	}
    
    	auto bestellmenge{ artikel[artikelnummer].mindestbestand - artikel[artikelnummer].bestand };
    
    	std::cout << bestellmenge << " Stueck bestellen? ";
    	char bestellen;
    	std::cin >> bestellen;
    
    	if (bestellen == 'J' || bestellen == 'j')
    	     std::cout << "Es werden " << bestellmenge << " Stueck bestellt.\n\n";
    	else std::cout << "Es wird nicht bestellt.\n\n";
    }
    

    sowas?



  • @Swordfish

    Ich kenne leider die ganzen Headerdateien noch nicht die in deinem Code vorkommen, da ich noch nicht soweit bin.

    Ich will einfach nur mit If und Array eine Bestandsliste, welches ich durch die Indexnummer des Arrays die Bestände abfragen kann.
    Da die Bestände alle unter 20 sind, soll das Programm mich fragen ob ich die fehlenden Artikel bis 20 nachbestellen möchte. Wenn ich bei der Anfrage nach der Artikelnummer nicht eine Zahl welches sich im Array befindet oder ein Buchstaben eingebe, soll das Programm mir die Meldung geben das ich die Falsche Artikelnummer eingegeben habe.

    Ich hoffe du hast mich jetzt verstanden und kannst mir jetzt besser Helfen.



  • @Anfängerc-2000 sagte in Bestandsliste (Array und if-Anweisung):

    Ich will einfach nur mit If und Array eine Bestandsliste, welches ich durch die Indexnummer des Arrays die Bestände abfragen kann.
    Da die Bestände alle unter 20 sind, soll das Programm mich fragen ob ich die fehlenden Artikel bis 20 nachbestellen möchte. Wenn ich bei der Anfrage nach der Artikelnummer nicht eine Zahl welches sich im Array befindet oder ein Buchstaben eingebe, soll das Programm mir die Meldung geben das ich die Falsche Artikelnummer eingegeben habe.

    Ok, dann mach das doch mal und melde dich, sobald du ein konkretes Detailproblem damit hast.