Problem mit switch?!



  • Hi, hab n Progrämmchen geschrieben, allerdings funktionierts nicht ganz wie es soll. Compiler spuckt allerdings keinen Fehler aus.

    Aufgabe:
    Programm, das positive Ganzzahlen von der Tastatur einliest und
    diese in einem Feld der Größe 500 Elemente speichert. Die Eingabe wird mit einer
    negativen Zahl beendet. Es soll dann über eine kleine Benutzerführung möglich sein,
    die Zahlen aufzulisten, die Zahl aller eingegebenen Zahlen anzuzeigen, ihre Summe
    zu berechnen, die Summe aller Quadrate zu berechnen, die Summe aller ungeraden
    Zahlen zu berechnen und die Summe aller Zahlen mit ungeradem Feldindex zu
    berechnen.

    mein Code:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main (int argc, char * const argv[]) 
    {
        int k[500];
    	char wdh;
    	int menu,feldzahl;
    	int Summe=0;
    
    	do
    	{	cout<<"\n positive GANZZAHLEN eingeben!!!\nBei Eingabe einer negativen Zahl: Ende Eingabe";
    		for (int a=0;a<500;a++)
    		{
    		cout<<"\nBitte " <<a <<"tes Feldelement eingeben\t";
    		cin>>k[a];
    
    			if(k[a]<0)
    			{
    			feldzahl=a; //Anzahl der geutzten Elemente
    			a=500; //for-Bedingung nicht mehr erfüllt, Eingabe fertig!
    			}//if-Klammer
    		} //for-Klammer
    
    		cout << "\nmoechten Sie die eingegebenen Zahlen in der Eingabereihenfolge ausgeben? press 1"
    		<<"\nmoechten Sie die Anzahl der eingegebenen Zahlen erfahren? press 2"
    		<<"\nmoechten Sie die Summe aller eingegebenen Zahlen ausgeben? press 3"
    		<<"\nmoechten Sie die Summe aller Quadrate der eingegebenen Zahlen ausgeben? press 4"
    		<<"\nmoechten Sie die Summe aller ungeraden Zahlen ausgeben? press 5"
    		<<"\nmoechten Sie die Summe aller Feldelemente mit ungeradem Index ausgeben? press 6\n";
    		cin >> menu;
    
    		switch (menu)
    		{
    		case '1': // Eingabereihenfolgeausgabe
    
    			for (int a=0;a<=feldzahl;a++)
    			{
    			cout<<"\n" <<a <<"tes Feldelement:\t" << k[a];
    
    			}
    		break;
    
    		case '2': //Anzahl der eingegebenen Feldelemente
    		cout<< "\nAnzahl der eingegebenen Feldelemente:\t" <<feldzahl;
    		break;
    
    		case '3': //Summe aller eingegebenen Zahlen
    
    		for (int a=0;a<=feldzahl;a++)
    			{
    			Summe=Summe+k[a];
    			}
    		cout<<"\nErgebnis ist:"	<<Summe;
    		break;
    
    		case '4': //Summe aller Quadrate der eingegebenen Zahlen
    		Summe=0;
    		for (int a=0;a<=feldzahl;a++)
    			{
    			Summe=Summe+(k[a]*k[a]);
    			}
    		cout<<"\nErgebnis ist:"	<<Summe;
    		break;
    
    		case '5': //Summe aller ungeraden Zahlen
    		Summe=0;
    		for (int a=0;a<=feldzahl;a++)
    			{
    
    				if (k[a]%2!=0)
    				{
    				Summe=Summe+k[a];
    				}//if-klammer
    			}//for
    		cout<<"\nErgebnis ist:"	<<Summe;
    		break;
    
    		case '6': //Summe aller... mit ungeradem Feldindex
    		Summe=0;
    		for (int a=1;a<=feldzahl;a+=2)
    			{
    			Summe=Summe+k[a];
    			}
    		cout<<"\nErgebnis ist:"	<<Summe;
    		break;
    
    		}//switch-klammer
    
    		cout<<"\nWiederholen?(j/n)";
    		cin>>wdh;
    	}//do-klammer
    	while (wdh=='j'||wdh=='J');
    
        return 0;
    }
    

    Denk, dass im switch irgendein Fehler is.
    Danke schonma



  • Pff... also rück das mal bitte etwas ordentlicher ein ... und nutze Functor's ...

    Ehm also dein Fehler ist, das du int einließt (1 bsw.), aber auf z.B. char '1' vergleichst. Nimm case 1: und es klappt 😉

    Achja und nimm std::vector usw. 😉



  • also erstma danke, stimmt natürlich... hab ch in der hektik vorhin verschlimmbessert 🙂

    Was soll ich bitte verwenden? std::vector??
    und das ist was?



  • du sollst mit vector arbeiten.

    dann machst du einfach einen

    vector<int> vec_integer;

    lässt den benutzer mit einer schleife eine neuezahl einlesen und hängst sie mit folgendem befehl an den vector dran:

    vec_integer.push_back(neuezahl);



  • zu dem thema fällt mir auch noch riks artikel "Object-Switching" ein.


Anmelden zum Antworten