Schleife und Input

Anfängerfragen zum Programmieren mit PureBasic.
Neo2000
Beiträge: 2
Registriert: 12.04.2005 21:12

Schleife und Input

Beitrag von Neo2000 »

Guten Abend.
Ich schreibe grad ein kleines Programm, in welchem am Anfang eine Zahl abgefragt wird:
Zahl$ = Input()

Ich will dann das ein Stück weiter unten in der Console etwas bestimmtes sooft ausgeführt wird, wie die Zahl ist die da steht. Ich hab das ganze dann per IF versucht...


test.l = 1
DerStart:
If Zahl$ = test.l
goto DasEnde:
Else
test.l = test.l + 1
Print("Ich bin eine Kuh, muh!")
goto DerStart:
Endif

DasEnde:
Delay(1000)
CloseConsole()


Das ganze geht aber nicht, der will mir immer weiss machen, dass er eine Variable nicht mit Zahlen vergleiche kann...

Wie muss ich das ganze ändern damit es klappt?
Oder gibt es vieleicht eine Möglichkeit, wie das ganze besser ( bzw einfacher, effektiver ) geht?

Danke für eure Hilfen, Neo2000
Ps: Wenn der Code Fehler hat, kreuzigt mich nicht, ich hab ihn grad ausm Kopf geschrieben, auf die Schnelle :)
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Nimmste am besten ein For-Schleife:
For test = 1 to Val(Zahl$)
; Dein Code
Next
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Code: Alles auswählen

OpenConsole()
PrintN("Wie Oft?")
SoOft$=Input()
PrintN("")
For Schleife=0 To Val(SoOft$)
PrintN("Ich bin eine Kuh, muh!") 
Next
Input()
CloseConsole()
End
:D
Neo2000
Beiträge: 2
Registriert: 12.04.2005 21:12

Beitrag von Neo2000 »

vielen dank...
das erinnert mich an basic von comodore64, genausowas hatte ich gesucht, thx :D

Code: Alles auswählen


Download$ = www.web.de/test.txt

For test = 1 To Val(Zahl$)

test = test + 1
 If URLDownloadToFile_(0,Download$,"c:\textdatei.txt"+test+"",0,0) = #S_OK
    Print("Ready")
  Else
    Print("Error. Couldn't download File.")
EndIf


Next

Ist das so richtig?
Und wenn ich das so mit +test+ hinten mach beim Download schreibt er mir wieder, dass ich keinen String mit Nummern mixen kann...

Edit: Also, das geht schonmal Prima mit der For Schleife :)

Edit2: Alles klar, wieder was gelernt, thx ^^

Edit3:
Eine Frage hät ich noch, und zwar:
Wieso muss bei For test = 1 To Val(Zahl$)
test = 1 stehen? Das es nicht geht, wenns da nicht so steht weiß ich, aber das wird ja auch irgend einen Grund haben, warum mann das da so macht...
Zuletzt geändert von Neo2000 am 12.04.2005 21:45, insgesamt 3-mal geändert.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Hier musst du zuerst test zu einem String konvertieren:
+ Str(test) +
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

jap um Zahlen mit nummern zu mischen musste den Befehl Str() nutzen.

Str() -> Zahl zu String
Val() -> String zu Zahl

also Str(test) :)

//Edit: Möp der Remi ist immer schneller^^
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Code: Alles auswählen

Anfang.l = 4
Ende.l = 13
For Zaehlvariable.l = Anfang To Ende Step 1
  Debug Zaehlvariable
Next
In [c]Anfang.l[/c] steht der Wert, den der Variablen [c]Zaehlvariable.l[/c] zuerst zugewiesen wird. Dann wiederholt sich die For-Next-Schleife sooft bis der Wert von [c]Ende.l[/c] erreicht wird indem die Zählvariable pro Wiederholung um eins erhöht wird.
In diesem Beispiel werden im Debuggerfenster die Werte 4 bis 13 ausgegeben, weil die Zeile [c]Debug Zaehlvariable[/c] in der For-Next-Schleife steht und den Inhalt der Zählvariablen ausgibt.
Das [c]Step 1[/c] kannst du in diesem Fall auch weglassen.

Wenn du allerdings schreibst [c]Step 2[/c] wird pro Schleifendurchlauf die Zählvariable immer um 2 erhöht. Das heißt, dass dann im Debuggerfenster folgende Zahlen stehen werden: 4, 6, 8, 10, 12


Ansonsten musst du dir noch klarmachen, das es numerische Variablen und String- oder Text-Variablen gibt.
Die numerischen Variablen heißen Byte, Word, Long oder Float und haben die Endungen .b, .w, .l und .f, ein String hat entweder die Endung .s oder einfach ein $ hinter dem Variablenamen.

Wenn du jetzt mit [c]Input()[/c] einen String in die Variable [c]Zahl$[/c] gelesen hast und willst diese dann für eine For-Next-Schleife benutzen, musst du den String zuerst in eine numerische Variable ändern. Standardmäßig nimmt man dann einfach eine Long-Variable. Die kann Zahlen von -2147483648 bis 2147483647 speichern. Größere numerische Variablen gibt es in PureBasic zur Zeit noch nicht. Zum Umwandeln des String in eine Long benutzt du dann die Funktion [c]Val()[/c] und umgekehrt gibt es dann noch die Funktion [c]Str()[/c]. Diese Funktionen funktioneren auch zwischen Strings und Words oder Bytes. Wenn du zwischen Strings und Floats konvertieren willst, brauchst du allerdings die Funktionen [c]StrF()[/c] und [c]ValF()[/c]. Schau einfach mal in der Hilfe nach.

Dein erster Code oben sieht demnach wie folgt aus:

Code: Alles auswählen

OpenConsole()
  Zahl$ = Input()
  
  test.l = 1
  DerStart:
  
  If Val(Zahl$) = test.l
    Goto DasEnde
  Else
    test.l = test.l + 1
    Print("Ich bin eine Kuh, muh!")
    Goto DerStart
  EndIf
  
  DasEnde:
  Delay(1000)
CloseConsole()
Oder jetzt auch so:

Code: Alles auswählen

OpenConsole()
  Zahl.l = Val(Input())
  For test.l = 1 To Zahl
    PrintN("Ich bin eine Kuh, muh!")
  Next
  Delay(1000)
CloseConsole()
Ist doch gleich viel kürzer, oder?

Deiner letzter Code sieht nach den Verbesserungen demnach so aus:

Code: Alles auswählen

Download$ = "www.web.de/test.txt"

For test = 1 To Val(Zahl$)
  If URLDownloadToFile_(0, Download$, "c:\textdatei.txt " + Str(test), 0, 0) = #S_OK
    Print("Ready")
  Else
    Print("Error. Couldn't download File.")
  EndIf
Next
Happy Coding! :allright:
Antworten