Variablen werden nicht deklariert, kann den Fehler nicht finden.



  • Hi,

    ich komme bei folgendem Problem einfach nicht weiter, ich habe eine kleine Aufgabe die eigentlich recht einfach ist, das Problem ist das Programm will einfach nicht richtig funktionieren und ich kann den Fehler nicht finden. Wenn ich es mit dem Debugger probiere, dann werden die Variablen merkwürdigerweiße überhaupt nicht deklariert? Aber wieso? Hier ist der Quellcode:

    (Das erste cout funktioniert, ich kann etwas eingeben, aber danach passiert einfach überhaupt nichts mehr, stürtzt nicht ab, sondern macht einfach nichts mehr)

    #include <iostream>
    using namespace std;
    
    char kette[1000];
    char kette2[1000];
    int ergebnis = 0;
    bool test = true;
    unsigned int i, zeichen;
    
    void lange (char kette[]);
    int potenz (int a);
    
    int main () {
    
    	// b)
    	cout << "Text eingeben: ";
    	cin >> kette;
    
    	for (i = 0; i < 1000; i++) {
    		cout << "test";
    		if (kette[i] == '\0') {
    			zeichen = i;
    			break;
    		}
    	}
    
    	for (i = 0; i < zeichen; i++) {
    		if (kette[i] >= 'a' && kette[i] <= 'z') {
    			kette[i] = kette[i] - 32;
    		}
    		else {
    			if (kette[i] >= 'A' && kette[i] <= 'Z') {
    			kette[i] = kette[i] + 32;
    			}
    		}
    	}
    
    	cout << kette;
    
    	// c)
    	cout << "\n\nZahl eingeben: ";
    	zeichen = 0;
    	//cin >> kette2;
    
    	kette[0] = '6';
    	kette[1] = '3';
    
    	zeichen = 2;
    
    	for (i = 0; i < zeichen; i++) {
    		if (!(kette[i] >= '0' && kette[i] <= '9')) {
    			test = false;
    			cout << "Ungültige Eingabe.";
    			break;
    		}
    	}
    
    	if (test) {
    		for (i = zeichen - 1; i >= 0; i--) {
    			ergebnis = (int) ergebnis + potenz(i-1) * ((kette[i] - '0'));
    		}
    		cout << ergebnis;
    	}
    }
    
    void lange (char kette[]) {
    	for (i = 0; i < 1000; i++) {
    		if (kette[i] == '\0') {
    			zeichen = i;
    			break;
    		}
    	}
    }
    
    int potenz (int a) {
    	int back = 1;
    	for (i = a; i > 0; i++) {
    		back = back * 10;
    	}
    	return back;
    }
    

  • Mod

    Was meinst du mit "nicht deklariert"? Deklaration ist ein Begriff beim Compiliervorgang. Das Compilieren funktioniert aber offensichtlich.

    In Zeile 61 hast du schon einmal eine schöne Endlosschleife, die mir mein Compiler automatisch gemeldet hat. Kann deiner bestimmt auch. Schalte mal Compilerwarnungen auf Maximallevel.

    Der Rest des Codes: Habe ehrlich gesagt aufgehört zu lesen, nach Zeile 9. Alle (oder auch nur eine) Variablen global zu machen, schreit nach selbst gemachten Problemen, die sich wahrscheinlich von alleine lösen würden, wenn man nur sauber programmieren würde (also unter anderem alle Variablen so lokal wie möglich machen).

    P.S.: Weil es mir ins Auge flog, beim Ansehen von Zeile 61: In Zeile 62 castest du einen int in einen int. Das spricht auch nicht unbedingt dafür, dass der Code folgende Anforderung erfüllt:

    c.rackwitz schrieb:

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.



  • Und schau dir die Schleife bei deiner potenz()-Funktion noch mal genau an - am besten mit einem Debugger step-by-step überprüfen.


Anmelden zum Antworten