Probleme eines Anfängers



  • Hey,
    ich habe vor ca. 2 Woche mit C++ angefangen. Ich lerne über die Internetseite Highscore.de. Nun steht dort eine Aufgabe an der ich mir schon seit 3 Tagen die Zähne ausbeiße.In meinem Quellcode is soweit alles richtig bis jetzt, bis auf die letzte if struktur. Ich finde den fehler einfach nicht. Anstatt mir die Zahl auszugeben, die ich eingegeben habe, gibt das Programm mir eine riesige minus Zahl raus...
    Bitte helft mir eine Lösung zu finden.

    #include <iostream> 
    #include<conio.h>
    
    using namespace std;
    
    int hoch(int a ,int b)
    {
    	for(int i=0;i<b;i++)
    	{
    		a = a*10;
    	}
    	return a;
    }
    int main()
    {
    	char rechnung[20];
    	int zahl[2][20], up, z;
    	cout<<"Geben sie die Rechnung ein!";
    	cin.getline(rechnung, sizeof(rechnung));
    
    //Überprüfen Wo der Operator steht
    	for(int i=0;i<sizeof(rechnung);i++)
    	{
    		up=i;
    		if(rechnung[i]=='*'||rechnung[i]=='/'||rechnung[i]=='+'||rechnung[i]=='-')
    		{
    			break;
    		}
    	}
    


  • Neben ein paar mehr oder weniger großen Kleinigkeiten (conio.h wird nicht verwendet, hoch() wird nicht verwendet, in der Schleife solltest du strlen() statt sizeof() nehmen, main() hat keine schließende Klammer, da ist aber viel C-artiges drin, ...) fällt mir vor allem eines auf: Wo ist deine Ausgabe?


  • Mod

    wxSkip schrieb:

    Neben ein paar mehr oder weniger großen Kleinigkeiten (conio.h wird nicht verwendet, hoch() wird nicht verwendet, in der Schleife solltest du strlen() statt sizeof() nehmen, main() hat keine schließende Klammer, da ist aber viel C-artiges drin, ...) fällt mir vor allem eines auf: Wo ist deine Ausgabe?

    Ich vermute, er hat versehentlich die Hälfte vergessen, daher auch die vielen anderen Fehler.

    @Threadersteller: Einzelne Zeichen eines std::string kannst du übrigens wie bei einem ein char-Array über die eckigen Klammern ansprechen. char-Array-Gefrickel ist gar nicht nötig.



  • Okay habs problem beseitigt, welches ich hatte. In diesem Quelltext waren echt viele Fehler drinn, habe aber mit n bischen nachdenken herausgefunden.

    #include <iostream> 
    #include<conio.h>
    
    using namespace std;
    
    int hoch(int a ,int b)
    {
    	int c=1;
    	for(int i=0;i<b;i++)
    	{ 
    		c = c*a;
    	}
    	return c;
    }
    int main()
    {
    	char rechnung[20],test;
    	int zahl[2][30], up,z=0;
    	cout<<"Geben sie die Rechnung ein!";
    	cin.getline(rechnung, sizeof(rechnung));
    
    //Überprüfen Wo der Operator steht
    	for(int i=0;i<20;i++)
    	{
    		up=i;
    		if(rechnung[i]=='*'||rechnung[i]=='/'||rechnung[i]=='+'||rechnung[i]=='-')
    		{
    			break;
    		}
    	}
    
    //Wenn Einstellige Zahl ----- Erste Zahl
    	if (up==1)
    	{
    		zahl[1][0] = static_cast<int>(rechnung[up-1])-48;
    		z = zahl[1][0];
    	}
    
    //Wenn Mehrstellig Erste Zahl
    	if(up>1)
    	{
    		zahl[1][up-1] = static_cast<int>(rechnung[up-1])-48;		
    
    		for(int i=1,j=up-2;j>=0;j--,++i)
    		{
    			zahl[1][j] = (static_cast<int>(rechnung[j])-48);
    			zahl[1][j] =zahl[1][j]*hoch(10,i);
    		}
    		for(int l=0;l<up;l++)
    		{
    			z = z + zahl[1][l];
    		}
    	}
    	cout<<z;
    	getch();
    }
    


  • Versteh mich nicht falsch, so was mal von Hand zu machen, ist eine gute Übung, aber letztendlich kannst du das sehr viel einfacher haben:

    int a, b;
    char op;
    
    std::cin >> a >> op >> b;
    
    if(std::cin) {
      // Bei Eingabe von beispielsweise "3 + 4" ist jetzt a == 3, op == '+' und b == 4
    } else {
      // Lesefehler
    }
    

Anmelden zum Antworten