Frage von Gernotshagen96, 92

Wieso kommt mein Programm durcheinander?

Hallo Leute, ich will nur das Prinzip lernen:

Ich will sagen, wenn die variable a= 'Ricardo' dann soll er den ton alarm.wav abspielen. Wenn a nicht 'Ricardo' ist, dann soll er evil.wav abspielen. Die ShowMessages zeigt er an richtiger stelle an, aber wenn man erst was falsches eingibt und dann aber das richtige, kommt TROTZDEM evil.wav. Ich sag dem doch wenn richtig dann alarm.wav, sonst(else) dann evil.wav. was mach ich falsch?:( ^^

Quelltext: procedure TForm1.Button1Click(Sender: TObject); begin a:= edit1.Text; If a = 'Ricardo' then begin ShowMessage('Hallo Rici!') ; SndPlaySound( 'alarm.wav', SND_ASYNC);

end else showmessage('falsch!'); SndPlaySound( 'evil.wav', SND_ASYNC);

Antwort
von maximilianus7, 25

ich denke, du kannst dein programm nicht richtig lesen, weil falsch eingerückt: hier die einrückung, die deinem code entspricht: http://paste2.org/Ekv9hKaZ . das solltest du selbst sehen können, was falsch läuft.

Antwort
von Gernotshagen96, 55
procedure TForm1.Button1Click(Sender: TObject);

begin
a:= edit1.Text;
If a = 'Ricardo' then
begin
ShowMessage('Hallo Rici!') ;
SndPlaySound( 'alarm.wav', SND_ASYNC);

end
else
showmessage('falsch!');
SndPlaySound( 'evil.wav', SND_ASYNC); end; end.

sorry, hier nochmal übersichtlich:)

Kommentar von RageMode ,

Um was für eine Sprache handelt es sich hier? Bin leicht verwirrt :D

Kommentar von Kiboman ,

ich glaube delphi

Kommentar von RageMode ,

Muss man in Delphi keinen Variablen Typ definieren?

Kommentar von Gernotshagen96 ,

doch, aber das hab ich schon gemacht, weiter oben, vom typ string, die variable liest er jaa richtig, weil die ShowMessages auch zu richtigen zeitpunkten kommen:)

Kommentar von RageMode ,

Achso okay, ich guck mal schnell was ich finden kann ;)

Kommentar von Gernotshagen96 ,

jouu danke, das wär nett:)

Kommentar von Gernotshagen96 ,

ohh achso, das ist object- pascal, eine variante von pascal, bei Delphi ist das:D:)

Kommentar von RageMode ,

Musst du vielleicht den kompletten Pfad der Datei die du abspielen willst angeben?

Kommentar von Gernotshagen96 ,

naja, nein, solange die .wav datei im ordner der exe ist, geht das sagen alle. Ich glaube irgendein logischer fehler ist hier drin, mit bildern ist das nämlich so ähnlich, ich sage halt wenn falsch sind die true und die false (visible eigenschaft), und wenn richtig umgekehrt. Aber beim 2. versuch wirds dann komisch und er lädt nur noch die einen und macht die anderen nicht mehr unsichtbar, ich versteh das nicht:D ^^

Kommentar von RageMode ,

Oha :D also ich komme von Java aber kann ziemlich viele lesen probier einfach mal den ganzen Pfad anzugeben.

Wieso hast du bei if hinter dem end nichts und beim end von else ein Semikolon?

Kommentar von RageMode ,

Kleiner Tipp: Java ist mit seinen Klammern etwas aufwendiger aber schöner zu lesen/schreiben und allgemein übersichtlicher :)

Antwort
von maximilianus7, 16

das A & O eines sauberen codingis ist das korrekte einrücken.

ich hab dir das mal auf auf http://paste2.org/Ekv9hKaZ dargestellt. dann solltest du die programmlogik selbst erkennen.

Kommentar von Gernotshagen96 ,

jaa danke fürs richtig stellen, aber bis auf die übersichtlichkeit hab ich jaa das gleiche geschrieben:/. Die ShowMessages kommen dann, wenn sie sollen, außer die Bilder, und sounddateien, da kommt dann was durcheinander. Ich dachte vielleicht liegt es an der reihenfolge wie ich es aufgeschrieben habe, oder vlt. was mit "repeat... until" machen?

Kommentar von maximilianus7 ,

durch die einrückung wird deutlich gemacht, dass die zeile 14: playsound NICHT zum else zweig gehört. hinter dem THEN oder ELSE folgt nur 1 anweisung. diese kann aber auch ein BEGIN ...; ...; END; block sein.

jetzt klar was zu tun ist?

Antwort
von PWolff, 14

Das begin am Anfang des else-Blocks fehlt.

Antwort
von Kiboman, 36

ich glaube du hast ein end zuviel?
// INCORRECT
if A < B then begin
DoSomething;
DoSomethingElse;
end else begin
DoThis;
DoThat;
end;

// CORRECT
if A < B then
begin
DoSomething;
DoSomethingElse;
end
else
begin
DoThis;
DoThat;
end;

edit.: ne mein fehler das 2te gehört zur methode.

egal ich steig aus ich bleibe bei c#

Kommentar von RageMode ,

Daran dürfte es nicht liegen er hat ja geschrieben das die Textnachrichten korrekt angezeigt werden

Kommentar von Kiboman ,

oh^^

da ist nicht nur das programm durchein andere gekommen.

Kommentar von RageMode ,

Wenn du das if beendest machst du nichts hin nur "end" und wenn du das else beendest schreibst du mit Semikolon "end;" wieso? Ist doch eigentlich das gleiche oder?

Kommentar von Kiboman ,

mh kp ich merke grade das mir pascal und delphi zu doof sind.

ich kenne und mag die { }

in einem if else

ist es nach dem if nicht zuende deswegen kein ;

da könen ja auch noch else if kommen oder eben das else

erst wenn die gesamte anweisung beendet ist kommt ein ;

Kommentar von RageMode ,

ja aber das "begin" und "end" stehen ja nicht direkt in Zusammenhang mit dem if block von daher müssten die eigentlich gleich sein :)

Kommentar von Kiboman ,

weißt du mein problem ist grade das ich den fehler nicht reproduzieren kann und das stört mich,

warum das jetzt genau so geschrieben wird ist mir auch egal,

pascal werde ich sowieso nie benutzten.

nur als beispiel in C# und vielen andern sprachen siehst wesentlich über sichtlicher aus.

namespace TEST
{
class Program
{
static void Main(string[] args)
{
string eingabe;
while (true)
{
eingabe = Console.ReadLine();
if (eingabe == "a")
{
new System.Media.SoundPlayer(@"alarm.wav").Play();
}
else if (eingabe == "b")
{
new System.Media.SoundPlayer(@"evil.wav").Play();
}
else if (eingabe == "c")
{
goto exit;
}
}
exit:;
}
}
}
Kommentar von PWolff ,

Das mit dem übersichtlicher liegt an der Einrückung und an deiner Gewohnheit.

Und du bist wohl auch ein "Echter Programmierer", einer von den Leuten, die keine Angst vor goto haben und in jeder beliebigen Sprache FORTRAN-Programme schreiben können? (wie wär's mit break?)

Kommentar von Kiboman ,

ich kann grade nicht erkennen wie und ob dein kommentar sarkatisch gemeint ist.

ich habe es weder in einer ausbildung oder studium gelernt.

ich habe es autodidaktisch mit hilfe der dokumentation und foren mit fachleuten erlernt.

ob man ein goto oder ein break benutzt ist der stil des Programmierers.

beides ist richtig.

Keine passende Antwort gefunden?

Fragen Sie die Community