Frage zu misplaced "else" Statement in C++

waterhog

Mitglied
Ich habe folgendes Program in Borland C++ Builder geschrieben wie es mir in der aufgabe nach design vorgeschrieben wurde:


Code:
{
AnsiString Line;
int Index;
WriteStringCr("Enter your text.It must not finish with a space character.");
Line = ReadString();
Index = 1;
        while(Index<=Length(Line))
        {
        if(Line[Index]!=' ')
                WriteChar(Line[Index]);
                Index= Index + 1;
                        else 
                        {
                        WriteStringCr("");
                                while(Line[Index]=' ')
                                        Index = Index + 1;
                                        }
                                        }
getchar();
        return 0;
}




und bekomme immer die Meldung "misplaced else statement": for else

Warum passiert das? Wie kann ich dieses beheben? Kann mir jemand einen tip geben?

Vielen Dank im voraus fuer Eure Muehe!
 
Zuletzt bearbeitet:
Dei deinem if-Block fehlen zwei geschweifte Klammern:
Code:
if(Line[Index]!=' ') {
    WriteChar(Line[Index]);
    Index= Index + 1;
} else {
    WriteStringCr("");
    while(Line[Index]=' ')
    Index = Index + 1;
}
Man kann bei der if-Struktur die Klammern zwar weglassen, allerdings darf dann
danach nur maximal eine Zeile kommen:
Code:
 // gültig
if (a == b)
    printf("a und b sind gleich\n");

// gültig, aber das zweite printf wird auch ausgeführt,
// wenn a und b nicht gleich sind
if (a == b)
    printf("a und b sind gleich\n");
    printf("a und b sind nicht ungleich\n");
hth
 
Mit einer vernünftigen Codeformatierung können solche Fehler selten passieren. Dabei ist egal ob man diese Möglichkeit:
Code:
if(a==b){
   // tu dies
}
else{
  // tu das
}
verwendet oder diese:
Code:
if(a==b)
{
   // tu dies
}
else
{
  // tu das
}
Übrigens wenn ich deinen Code richtige gelesen habe, dann hast du noch einen anderen Fehler drin und zwar läufst du über das Array hinaus:
Code:
while(Line[Index]=' ') // <- das sollte immer true geben, bis über das Array hinausgelaufen wird
// solte eher so sein:
while(Line[Index]==' ')
Ich weiß nicht wie die AnsiString Klasse (ist das eine Klasse?) in Borland implementiert ist aber wenn da kein "Schutz" da ist, dann wird das Programm irgendwann undefiniert abstürzen, bzw. es würde eine Exception geworfen, die nicht gefangen wird.

Gruß Homer
 
Danke

Vielen Dank Euch beiden!

So ein Fehler, denn ich sofort haette sehen muessen, schien doch so kompliziert und unklaerbar.
 
Zurück