Hilfe bei einem Programm
Hilfe bei einem Programm
Ich hoffe ich bin hier richtig mit meiner Frag.
Ich muss im Zuge meines Studiums ein Informatikprojet absolvieren. Leider bin ich grottenschlecht im Programmieren und gleichzeitig der einzige in meiner Gruppe wenigstens überhaupt etwas davon versteht.
Unser Programm, wie so ziemlich jedes, benötigt an verschiedenen Stellen, mehrere eingaben. Hauptsächlich müssen Lägen in Form von Zahlen eingegeben werden
Das Problem ist, wenn wir unsere Eingabe machen und man scheibt ausversehen einen Buchstaben anstatt eine Zahl bekommen wir den Runtime Error 106. Da je eine Zahl in Form eines Double erwartet wurde und der eine String bekommen hat.
Meine Frage ist, wie fange ich so einen Fehler allgemein ab. Ich will das mein Programm nicht Crasht wenn ich mal eine Zahl anstatt eines Buchstaben und einen Buchstaben anstatt einer Zahl eingebe, sondern das mir einfach gesagt wird, tut mir leid, falsche eingab bitte wiederholen sie die Eingabe oder sowas.
Ich stelle mich wahrscheinlich ziemlich blöd an, aber wie gesagt ich bin einen absoluteren Anfänger was das Programmieren angeht und hab die Grundlagen erst dieses Semester in der Uni gelernt.
Ich konnte auch keine Lösung über Google finden also hoffe ich hier auf Hilfe.
Vielen Dank im Voraus an jeden der mir helfen kann bzw. versucht zu helfen.
Ich muss im Zuge meines Studiums ein Informatikprojet absolvieren. Leider bin ich grottenschlecht im Programmieren und gleichzeitig der einzige in meiner Gruppe wenigstens überhaupt etwas davon versteht.
Unser Programm, wie so ziemlich jedes, benötigt an verschiedenen Stellen, mehrere eingaben. Hauptsächlich müssen Lägen in Form von Zahlen eingegeben werden
Das Problem ist, wenn wir unsere Eingabe machen und man scheibt ausversehen einen Buchstaben anstatt eine Zahl bekommen wir den Runtime Error 106. Da je eine Zahl in Form eines Double erwartet wurde und der eine String bekommen hat.
Meine Frage ist, wie fange ich so einen Fehler allgemein ab. Ich will das mein Programm nicht Crasht wenn ich mal eine Zahl anstatt eines Buchstaben und einen Buchstaben anstatt einer Zahl eingebe, sondern das mir einfach gesagt wird, tut mir leid, falsche eingab bitte wiederholen sie die Eingabe oder sowas.
Ich stelle mich wahrscheinlich ziemlich blöd an, aber wie gesagt ich bin einen absoluteren Anfänger was das Programmieren angeht und hab die Grundlagen erst dieses Semester in der Uni gelernt.
Ich konnte auch keine Lösung über Google finden also hoffe ich hier auf Hilfe.
Vielen Dank im Voraus an jeden der mir helfen kann bzw. versucht zu helfen.
Re: Hilfe bei einem Programm
Nutzt du eine GUI oder die Konsole? Zeig doch mal etwas Code, was du schon hast.edge165 hat geschrieben:Das Problem ist, wenn wir unsere Eingabe machen und man scheibt ausversehen einen Buchstaben anstatt eine Zahl
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- af0815
- Lazarusforum e. V.
- Beiträge: 6771
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Hilfe bei einem Programm
Kurzum: Entweder du verwendest eine Umwandlungsfunktion die prüft
TryStrToInt -> Siehe http://www.freepascal.org/docs-html/rtl ... toint.html
TryStrToFloat -> http://www.freepascal.org/docs-html/rtl ... float.html
oder per Exception -> Siehe http://www.freepascal.org/docs-html/rtl ... toint.html
Ok, dein Problem ist klar und du willst es auch lösen, das klingt schon mal gut.
Du kannst auch Code hier posten, dann bitte mit Highlighter (dann ist es besser lesbar).
Windows GUI oder auf der Konsole oder Linux ? Wo soll dein Programm laufen ?
Andreas
TryStrToInt -> Siehe http://www.freepascal.org/docs-html/rtl ... toint.html
TryStrToFloat -> http://www.freepascal.org/docs-html/rtl ... float.html
oder per Exception -> Siehe http://www.freepascal.org/docs-html/rtl ... toint.html
Code: Alles auswählen
Program Example82;
{$mode objfpc}
{ This program demonstrates the StrToInt function }
Uses sysutils;
Begin
Writeln (StrToInt('1234'));
Writeln (StrToInt('-1234'));
Writeln (StrToInt('0'));
Try
Writeln (StrToInt('12345678901234567890'));
except
On E : EConvertError do
Writeln ('Invalid number encountered');
end;
End.

Windows GUI oder auf der Konsole oder Linux ? Wo soll dein Programm laufen ?
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Hilfe bei einem Programm
Danke schonmal für die Antworten.
Im Moment Läuft noch alles über die Konsole.
Ich will es hier nicht übertreiben. Dass ist nur ein winziger Teil von meinem Code. Wir Arbeiten in der Gruppe schon seid 2 Monaten an dem Programm. Wir haben dieses Problem die ganze Zeit vor uns hergeschoben. Ich will es endlich lösen
Im Programm oben tritt der Fehler 106 bei der Ja Nein Abfrage in der auto_manu() Prozedur auf und in der Prozedur strecke_eingeben(); wenn ich strecke_g Abfrage.
Ich habe die Erklärung von af0815 nicht wirklich verstanden.
Könnte mit jemand sagen wie ich das auf meinen Code anwenden könnte
Im Moment Läuft noch alles über die Konsole.
Code: Alles auswählen
program Fahrtenvergleich;
var
strecke_g:double;
procedure auto_manu();
type
Tja_nein = (j,n);
var
antwort : Tja_nein;
begin
writeln('Wollen sie die Parameter manuell eingeben? (j= ja; n = nein)');
readln(antwort);
if antwort = j then
manu_eingabe()
else
writeln('Prozedur noch in Arbeit')
{auto_eingabe(); }
end;
procedure manu_eingabe();
//Programmablauf bei komplett manueller Eingabe
begin
strecke_eingeben();
strecke_pruefen();
manu_ampel_abstand();
end;
procedure strecke_eingeben();
//Manuelle Eingabe der Länge der Gesamtstrecke
begin
writeln('Wie lang soll die Strecke (in ganzen Metern!) sein? (Min 250m, Max 100.000m)');
readln(strecke_g);
end;
begin
auto_manu();
readln();
end.
Im Programm oben tritt der Fehler 106 bei der Ja Nein Abfrage in der auto_manu() Prozedur auf und in der Prozedur strecke_eingeben(); wenn ich strecke_g Abfrage.
Ich habe die Erklärung von af0815 nicht wirklich verstanden.
Könnte mit jemand sagen wie ich das auf meinen Code anwenden könnte
Re: Hilfe bei einem Programm
Ich würde den Wert zunächst in einen lokalen String einlesen und dann mit TryStrToFloat prüfen, ob es eine gültige Zahl ist:
Wenn du das verstanden hast, kannst du sicher auch noch eine Prüfung einbauen, ob - bei gültiger Zahl - der Wert in dem gewünschten Bereich liegt.
Code: Alles auswählen
procedure strecke_eingeben;
var
s: String;
ok: Boolean;
begin
ok := false;
repeat
WriteLn('Wie lang soll die Strecke sein? (Min 250m, Max 100000m)');
Readln(s);
if TryStrToFloat(s, strecke_g) then
ok := true
else
WriteLn('Das ist keine gültige Zahl.');
until ok;
end;
Re: Hilfe bei einem Programm
Danke. Das war eine riesige Hilfe.
Hättest du noch einen Vorschlag wie ich dasselbe Problem in der Funktion auto_manu() lösen kann. Die steht im Quellcode den ich zuletzt geschickt habe.
Da ich hiermit mit einem eigenen Typen arbeite müssen alle Buchstaben außer j und n sowie alle Zahlen abgefangen werden. Ich bin mir immer noch nicht sicher wie ich das machen soll.
Hättest du noch einen Vorschlag wie ich dasselbe Problem in der Funktion auto_manu() lösen kann. Die steht im Quellcode den ich zuletzt geschickt habe.
Da ich hiermit mit einem eigenen Typen arbeite müssen alle Buchstaben außer j und n sowie alle Zahlen abgefangen werden. Ich bin mir immer noch nicht sicher wie ich das machen soll.
Re: Hilfe bei einem Programm
Einen Vorschlag hätte ich schon, aber ich werde dir doch nicht die ganze Projektarbeit machen.edge165 hat geschrieben:Danke. Das war eine riesige Hilfe.
Hättest du noch einen Vorschlag wie ich dasselbe Problem in der Funktion auto_manu() lösen kann. Die steht im Quellcode den ich zuletzt geschickt habe.
Da ich hiermit mit einem eigenen Typen arbeite müssen alle Buchstaben außer j und n sowie alle Zahlen abgefangen werden. Ich bin mir immer noch nicht sicher wie ich das machen soll.
Überleg doch mal, wie das bei der anderen Prozedur ist: Zuerst als String einlesen, dann den String prüfen und dann entscheiden, welcher Wert genommen wird. Weißt du, wie man zwei Strings vergleicht? Mit welchen Strings müsste der eingegebenen String verglichen werden?