C++ else und if else fehler in der struktur

aceex

Cadet 4th Year
Registriert
März 2013
Beiträge
110
Also ich habe hier ein gewisses Poblem undzwar lerne ich per Buch gerade C++, dort gibt es zu den Themen aufgaben, aber ohne Lösungen. Auf jedem Fall bekomme ich bei meinen else und else if's irgendwie Fehler. Wahrscheinlich ist meine struktur falsch.
Kann mir vieleicht jemand helfen die Fehler zu entfernen?

Danke!


Code:
#include <iostream>


using namespace std;

int main(){

	int n1, n2, f1;

	cout << "Do I have to print the numbers reversewise or not? (1 for yes. 2 for no.)" << endl;
	cin >> f1;

		if (f1 == 2){
	cout << "print the number to start from: ";
	cin >> n1;
	cout << "print the number to stop on: ";
	cin >> n2;

	while (n1 != n2){
		cout << n1 << " ";
		n1 = n1 + 1;

	} 
		else if(f1 == 1){

			cout << "Do I have to print the numbers reversewise or not? (1 for yes. 2 for no.)" << endl;
	cin >> f1;

		if (f1 == 2){
	cout << "print the number to start from: ";
	cin >> n2;
	cout << "print the number to stop on: ";
	cin >> n1;

	while (n1 != n2)
		cout << n1 << " ";
		n1 = n1 + 1;
	
		} else{
		cout << "Error! Wrong input.";

	
	}


	

	system("PAUSE");

		}
 
Da fehlen einige Klammern.

Schreibe den Code sauber hin, so dass du siehst, wo ein Block (z.B. if) anfängt und wo er wieder endet.
 
also das mit:
Code:
while(bedingung){tu was}
else if(bedingung) {tu was}
gibts nicht...
was geht:
Code:
while(bedingung) {tu was}
if(bediung) {tu was}

und was du wahrscheinlich meintest gelernt zu haben:
Code:
if(bedingung){tu was}
else if(2.bedingung) {tu was}
else {wird ausgeführt, wenn die beiden ersten if's nicht stimmen}

edit: lösung ist viel einfacher: code richtig einrücken + schön klammern setzen ;)
 
Zuletzt bearbeitet:
Du schaust erst ob f1==2 und im else Fall prüfst du ob f1==1 - du kannst hier aber schon davon ausgehen, dass f1==1 ist da du ja sonst nicht im else fall wärst.
Und anschließend soll man f1 nochmal eingeben - alles bischen doppelgemoppelt.

Es sollte eher so sein:

einageb f1

if (f1==1) {Code F1}
else {Code F2}
 
aceex schrieb:
Auf jedem Fall bekomme ich bei meinen else und else if's irgendwie Fehler.

Irgendwie Fehler? So wird das nix! Du solltest die erste Fehlermeldung genau durchlesen und versuchen, sie zu verstehen. Der Compiler wird dich sogar mit der Nase auf die konkrete Zeile stoßen.

Dann diesen Fehler beheben, neu kompilieren und dich der nächsten Fehlermeldung zuwenden.
 
Wie powerfx schon sagte, solltest du dir unbedingt auf die Einrückung achten. Dadurch vermeidet man öffnende und schließende Klammern zu vergessen und sieht was zu welchem Block gehört.
Ich hab das mal für dich gemacht und schon wird deutlich, dass unzählige geschweifte Klammern fehlen.
Code:
#include <iostream>
 
 
using namespace std;
 
int main(){
 
    int n1, n2, f1;
 
    cout << "Do I have to print the numbers reversewise or not? (1 for yes. 2 for no.)" << endl;
    cin >> f1;
 
    if (f1 == 2){
        cout << "print the number to start from: ";
        cin >> n1;
        cout << "print the number to stop on: ";
        cin >> n2;
     
        while (n1 != n2){
            cout << n1 << " ";
            n1 = n1 + 1;     
        } 
    else if(f1 == 1){
 
        cout << "Do I have to print the numbers reversewise or not? (1 for yes. 2 for no.)" << endl;
        cin >> f1;
 
        if (f1 == 2){
            cout << "print the number to start from: ";
            cin >> n2;
            cout << "print the number to stop on: ";
            cin >> n1;
         
            while (n1 != n2)
                cout << n1 << " ";
            n1 = n1 + 1;
        
        } else{
            cout << "Error! Wrong input.";
    }
 
    system("PAUSE");
}
 
Also der Fehler genau ist "Anweisung wird erwartet" undzwar in meiner sowohl auch in der verbesserung von Freezedevil in Zeile 23 und nur "else" wird unterstrichen. Untitled-1.jpg
 
Entferne mal die Abfrage ob (f1==1) du bist ja schon im else Fall da ist (f1==2)

Um andere Bereiche auszuschließen und dir ein if Fall zu sparen kannst du vorher eine Abfrage machen bevor du den Code anwendest der dir einen Fehler wirft.

zB

if ((f1<1) || (f1>2)) {Gib Error aus}
 
Zuletzt bearbeitet:
Ich hab auch nichts verbessert ;)
Der von mir gepostete Code ist identisch zu deinem, nur anders eingerückt. Bei dem von dir angesprochenen Fehler fehlt vor dem else noch ein "}". Wenn ich die Sache recht überblicke müsste noch ein weiterer syntaktischer Fehler drin sein, der die Kompilierung verhindert. Dann sind aber noch ein paar Klammerfehler die dafür sorgen, dass das Programm einfach nicht das macht was du willst.
 
Natürlich Ansichtssache, aber ich finde es sogar besser die Klammer in eine jeweils eigene Zeile zu setzen ("Allman" glaube ich). Dann sieht man es noch besser. Öffnende und schließende Klammer stehen so genau untereinander.
Code:
if (f1 == 2)
{
    cout << "print the number to start from: ";
    cin >> n1;
    cout << "print the number to stop on: ";
    cin >> n2;
    while (n1 != n2)
    {
        cout << n1 << " ";
        n1 = n1 + 1;
    }
else if(f1 == 1)
{
~
}
In Zeile 2 haben wir so eine öffnende Klammer, wo es keine entsprechend schließende auf gleicher Höhe gibt.
 
Ich setze ebenfalls die Klammer so wie powerfx. Das dazu in Notepad und man kann eigentlich die Klammern nicht mehr falsch setzen.
 
Zurück
Oben