Hallo, ich programmiere c unter Linux.
in meinem Code habe ich eine File-Abrage mit einem Goto: verbunden:
das problem ist, das ausirgend einem Grund, immer am ende der Schleife
in die PrError-Schleife ausgeführt wird als ob kein goto exestiert.
hat einer eine Idee woran es liegen könnte?? Danke
warum denn auch nicht PrError: ist nur eine Sprungmarke. Es ist doch
normal das er am ende diesen Code ausführt.
goto hat zwar seine berechtigung aber hier geht es bestimmt besser ohne.
Du meinst also, daß eine Ok-Meldung ausgegeben, aber trotzdem gleich
nach dem ersten Durchlauf aus der Schleife gesprungen wird?
Da sehe ich so erstmal keinen Grund dafür. Kannst du mal ein
vollständiges Programm posten, das den Fehler zeigt?
Übrigens: main() muß int zurückgeben.
Mir geht es nur darum zu verstehen warum. Der abschnitt mit dem goto
immer ausgeführt wird? Ich habe nur an der besagten stelle ein goto. Hab
bis jetzt gedacht das dieser Abschnitt nur dann in kraft tritt wenn mit
goto dadrauf gesprungen wird. Ich weiss man das, dass goto nicht gerne
verwendet wird. aber ich wollte einen sprung haben aus vielen
abschnitten des codes haben und das war für mich die einfacherere
Lösung.
hab jetzt mal vor dem "PrError" ein zeichen ausgegeben, das goto
komplett auskomentiert und jetzt bin ich komplett verwirrt.
.
//goto PrError;
.
putchar('b');
PrError:
for (j=0; j<2; j++)
{
putchar('a');
if(NULL != fd[j])
{
fclose (fd[j]);
fd[j] = NULL;
}
}
.
Die Ausgabe lautet baabaa. Meiner Meinung nach sollte entweder nur
einmal b oder nur baa ausgegeben werden.
Poste vollständigen anständig formatierten Quelltext und verwende die
unter Formatierung oberhalb des Texteingabefeldes aufgeführten Codes, um
"C-Code" mit Syntaxhighlighting anzeigen zu lassen.
Alibaba schrieb:> Die Ausgabe lautet baabaa. Meiner Meinung nach sollte entweder nur> einmal b oder nur baa ausgegeben werden.
doch das ist normal. Das ist wie beim Monopoli, es gibt "Gehe zu Start"
und es gibt den normale ablauf, dabei kommt man auch zum Start. Das eine
ist nur eine akürzung.
Kommando zurück. Mir ist aufgefallen, dass ich die funktion über die wir
sprechen zweimal ausgeführt wird, desshalb auch die doppelte ausführung
Sorry. ausgegeben wird nur baa.
Sprunglabels werden einfach ignoriert, wenn sie im normalen Ablauf
vorkommen. Wenn das nicht gewünscht ist, musst du den normalen
Programmablauf um den "PrError"-Teil herumleiten.
Peter schrieb:> doch das ist normal. Das ist wie beim Monopoli, es gibt "Gehe zu Start"> und es gibt den normale ablauf, dabei kommt man auch zum Start. Das eine> ist nur eine akürzung.>>
eine super Erklärung extra für leute wie mich ;-)
Wo ist jetzt das Problem? Das Programm macht das, was du vorgibst.
Du gibst als erstes 'b' aus, dann in der Schleife exakt zweimal
'a', so wie es der Schhleifenrumpf vorgibt!
Gruß
Joachim
XXX schrieb:> Wo ist jetzt das Problem? Das Programm macht das, was du vorgibst.
Ja das merke ich auch grade. Ich habe vor 5min. nur gedacht das ein
goto-Abschnitt dann ausgeführt wird, wenn durch ein goto zum abschnitt
gesprungen wird.
Web-Applikator schrieb:> return;> PrError:"
Die kombination mit einem return ist glaube ich in meinem Fall die beste
lösung. Hätte einwenig mehr googeln sollen.
Trotzdem danke.