Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zeilenversatz bei "falschen" >>INPUT<<

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jh35104



Anmeldungsdatum: 15.02.2011
Beiträge: 12

BeitragVerfasst am: 22.04.2011, 21:27    Titel: Zeilenversatz bei "falschen" >>INPUT<< Antworten mit Zitat

Hallo zusammen mich quält folgende Frage!!!

Wie funktioniert es, bei einer falschen Eingabe bei einem Inputbefehl den Satz " Bitte korrigieren Sie......." an eine beliebiege Stelle des Bildschirms zu setzen?????
_______
CLS
SCREEN 12
LOCATE 1,1: INPUT "Geben Sie die gewünschte Anzahl ein: ", a

'eine falsche Eingabe wäre jetzt z.Bsp.: hklafh
' a darf den wert 0000 bis 9999 haben
' die Begrenzung des Werts habe ich mit IF a >9999 und GOTO + Marke (ja ich weiß GOTO ohje.... durchgeknallt) gemacht
' wenn jetzt z.Bsp.: hklafh (zufällige Tastenauswahl mit ganzer Hand) eingegeben wird zerstörrt die Meldung meinen Bildaufbau
' ich stelle mir so was in der Art vor

LOCATE 24,1: //"FEHLERMELDUNG+Korekturwert"//
Also eine Art Statuszeile in der unteren Bildschirmzeile
Wer hat da Erfahrung und eine einfache umsetzbare Idee für das Problem

DANKE für Eure Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 22.04.2011, 22:23    Titel: Antworten mit Zitat

Hi, ich schreibe zwar immer in FB, das sollte aber auch in QB funzen.
Ich benutze die oberste zeile um eine Message auszugeben.
Code:
Dim Shared __StatusBarSize__ As Integer
Dim Shared __ConsoleRows__ As Integer

Sub InitStatusBar ( ByVal Size As Integer = 80, ByVal ConsoleRows As Integer = 25)
   View Print 2 To ConsoleRows
   __StatusBarSize__ = Size
   __ConsoleRows__ = ConsoleRows
End Sub

Sub StatusBarPrint ( ByVal Stri As String )
   Dim As Integer Row,Posi,Low
   Dim As String Leer
   Row = CsrLin
   Posi = Pos
   View Print 1 To 2
   Locate 1,1
   For i As Integer = 1 To __StatusBarSize__-Len(stri)-1
      Leer += " "
   Next
   Print Stri+Leer
   View Print 2 To __ConsoleRows__
   Locate Row, Posi
End Sub

InitStatusBar ()
StatusBarPrint ( "StatusBar" )
Locate 1,1
For i As Integer = 0 To 30
   Print i
   Sleep 100,1
Next
StatusBarPrint ( "kann sich veraendern" )
sleep

ich hoffe das konnte helfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 22.04.2011, 23:31    Titel: Antworten mit Zitat

Zitat:
LOCATE 24,1: //"FEHLERMELDUNG+Korekturwert"//

Wenn ich dich richtig verstehe, dann willst du eine Meldung in die letzte Bildschirmzeile setzen, ohne dass es dir anschließend den Bildschirm nach oben schiebt. Grund für das Verschieben ist der Zeilenumbruch am Ende der Ausgabe, aber den kannst du mit einem Strichpunkt ; am Ende des PRINT unterdrücken:
Code:
LOCATE 24, 1
PRINT "Bitte korrigieren Sie.......";

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jh35104



Anmeldungsdatum: 15.02.2011
Beiträge: 12

BeitragVerfasst am: 23.04.2011, 08:48    Titel: Antworten mit Zitat

Hallo zusammen Danke für die Lösungsvorschläge.

Leider ist mir nicht ganz geholfen. Bei dem Problem geht es um eine Interne QB-Fehler-Meldung wenn ich z.Bsp.: einer SINGLE VARIABLE einen Buchstaben ($) zuordne, was ja logischerweise nicht geht. Also diese Fehlermeldung die dann erscheint zerstört mein Bildaufbau. Wie kann ich diese bändigen?

MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 23.04.2011, 11:05    Titel: Antworten mit Zitat

Um einen String in eine Zahl zu verwandeln, gibt es den Befehl VAL. Ich habe da in etwa so gearbeitet:
Code:
eingegebeneZahl = VAL(benutzereingabe)
IF (eingegebeneZahl <= 0 OR eingegebeneZahl > 9999) AND benutzereingabe <> "0" THEN
  fehlermeldung("Eingabe zu groß oder zu klein oder keine Zahl")
END IF

Strings, die keine Zahl darstellen (z. B. "hklafh ") liefern den Wert 0 zurück; und mit der Überprüfung AND benutzereingabe <> "0" stellst du sicher, dass eine Eingabe der Zahl "0" erlaubt ist.

Nicht zu verhindern ist mit dieser Methode, dass "123abc" erlaubt ist; das ergibt dann die Zahl 123. Nicht erlaubt ist dagegen "0.0"; wenn du das auch noch alles abfangen willst, wird es aber ein gutes Stück komplizierter (in diesem Fall würde ich eiche handgeschriebene INPUT-Routine empfehlen).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jh35104



Anmeldungsdatum: 15.02.2011
Beiträge: 12

BeitragVerfasst am: 23.04.2011, 11:41    Titel: Antworten mit Zitat

DANKE!!!

So Funktioniert das?!?
Hat mir sehr weitergeholfen. Ich musste die Bedingung <0 auf <1 ändern weil sonst bei die $Eingabe das Programm ohne Korrekturmöglichkeit weitergelaufen wäre:


'ez=eingabe Zahl
'a$=Stringeingabemöglichkeit


cls
screen 13
neu:
cls
locate 1,1 : input"EINGABE: ";a$
ez = Val(a$)

if ez < 1 or ez >9999 then
goto neu:
end if

cls
locate 2,1verwundert "AUSGABE:", ez
sleep
end


lachen

FROHE OSTERN

P.S.: Wie würde das mit ON ERROR // ERR = 13 gehn???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 23.04.2011, 12:08    Titel: Antworten mit Zitat

Mit ON ERROR bin ich nicht mehr sonderlich vertraut; geht in etwa so:
Code:
ON ERROR GOTO fehler
erzeugeDenFehler
' ... weiter im Programm

fehler:
IF ERR = gewueschteFehlerNr THEN
  PRINT "Dieser und jener Fehler ist aufgetreten!"
END IF
' geht natürlich auch schön mit SELECT CASE
' anschließend je nach Wunsch END oder RESUME oder RESUME NEXT

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jh35104



Anmeldungsdatum: 15.02.2011
Beiträge: 12

BeitragVerfasst am: 23.04.2011, 12:37    Titel: Antworten mit Zitat

so in der Art hab ich das versucht aber ERR 13 (Datentyp %><$) wurde nicht erkannt sondern immer ERR 20 in diesem FALL kein FEHLER angezeigt

NAJA

Die Lösung mit Umwandeln der $ in % mit VAL geht gut und ist nicht viel Aufwand in meinem speziellen Fall.

DANKE nochmals

happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 23.04.2011, 12:43    Titel: Antworten mit Zitat

Um den "RESUME ohne Fehler" zu vermeiden, darf dein Programm natürlich nicht ohne Fehler in die Fehlerroutine hineinlaufen - also vor der Fehlerroutine das Programm beenden.
Code:
ON ERROR GOTO fehler
' ... Programmablauf ...
END

fehler:
' Fehlerbehandlung

Die Umwandlung ist aber auf jeden Fall die bessere Lösung - die ON-ERROR-Fehlerroutine ist eigentlich eher ein Notfallprogramm für alles, was du nicht schon frühzeitig abfangen kannst.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz