Seite 1 von 3

Pointer?Wenn ja-WIE?

Verfasst: 20.08.2005 11:37
von Tafkadasom2k5
Und da bin ich schon wieder.... <)
Ja-war gerade dabei mirn paar Procedures zu schreiben die ich in Programmen meistens brauche....
Aaaaber: warum geht folgender Code nicht richtig:

Code: Alles auswählen

Global WhichChars.s
Global HowManyChars
Procedure CheckCharsDetail(Eingabe.s,Notallowed.s)
  For I=1 To Len(Eingabe.s)
    
    Analyze.s =  Mid(Eingabe.s,I,1)
    
    For A=1 To Len(Notallowed.s)
      
      If Analyze.s = Mid(Notallowed.s,A,1)
        
        If Details.s = ""
           Details.s = Details.s + Mid(Notallowed.s,A,1)
        Else
          Details.s = "," + Mid(Notallowed.s,A,1)
        EndIf
       
        
       HowMany.l = HowMany + 1
      EndIf
    
   Next
  Next
  
  If HowMany > 0
    ProcedureReturn(1)
    Debug HowMany = Howmanychars
    Debug Details = WhichChars.s
  Else
    ProcedureReturn(0)
  EndIf
 
  EndProcedure
Er gibt mir nicht mal im Debug Window die Ergebnisse aus-heisst ja folglisch, dass die Variable "HowMany" nie 0 überschreitet-bloss wieso nicht...?

Danke....
Marc

(P.S.: Wenn das mit Pointern funktionieren sollte-kann man auch Strings per pointer verweisen?Und -wie geht das in PB? In der Hilfe steht was mit "*"....aber das funktioniert irgendwie auch ned....zumindets ned bei mir...
Ich habe PureBasic Vollversion 3.91)

Re: Pointer?Wenn ja-WIE?

Verfasst: 20.08.2005 11:56
von crossroads
Tafkadasom2k5 hat geschrieben:Und da bin ich schon wieder.... <)
Ja-war gerade dabei mirn paar Procedures zu schreiben die ich in Programmen meistens brauche....
Aaaaber: warum geht folgender Code nicht richtig:

Code: Alles auswählen

Global WhichChars.s
Global HowManyChars
Procedure CheckCharsDetail(Eingabe.s,Notallowed.s)
  For I=1 To Len(Eingabe.s)
    
    Analyze.s =  Mid(Eingabe.s,I,1)
    
    For A=1 To Len(Notallowed.s)
      
      If Analyze.s = Mid(Notallowed.s,A,1)
        
        If Details.s = ""
           Details.s = Details.s + Mid(Notallowed.s,A,1)
        Else
          Details.s = "," + Mid(Notallowed.s,A,1)
        EndIf
       
        
       HowMany.l = HowMany + 1
      EndIf
    
   Next
  Next
  
  If HowMany > 0
    ProcedureReturn(1)
    Debug HowMany = Howmanychars
    Debug Details = WhichChars.s
  Else
    ProcedureReturn(0)
  EndIf
 
  EndProcedure
Er gibt mir nicht mal im Debug Window die Ergebnisse aus-heisst ja folglisch, dass die Variable "HowMany" nie 0 überschreitet-bloss wieso nicht...?

Danke....
Marc

(P.S.: Wenn das mit Pointern funktionieren sollte-kann man auch Strings per pointer verweisen?Und -wie geht das in PB? In der Hilfe steht was mit "*"....aber das funktioniert irgendwie auch ned....zumindets ned bei mir...
Ich habe PureBasic Vollversion 3.91)
Debug-Zeilen ändern:

Code: Alles auswählen

    Debug "HowMany = " + Str(Howmanychars)
    Debug "Details = " + WhichChars.s

Verfasst: 20.08.2005 12:05
von Tafkadasom2k5
"HowMany" und "WhichChars" sollen Variablen später sein, die an die Main-Schleife übergeben werden..... Aber diese Variablen werden ja (mit oder ohne Debug) nicht an die Schleife übergeben-warum nicht?

Verfasst: 20.08.2005 13:20
von jear

Code: Alles auswählen

If HowMany > 0 
  ProcedureReturn(1) 
  Debug HowMany = Howmanychars 
  Debug Details = WhichChars.s 
Else 
  ProcedureReturn(0) 
EndIf 
Mit ProcedureReturn(1) ist die Abarbeitung in der Prozedur abgeschlossen.
Die folgenden Debug-Statements sind so witz- und zwecklos.
Schreibe sie einfach vor das ProcedureReturn(1).

Zu den falschen Debug-Statements selbst hast Du ja schon Hinweise bekommen.

Richtig wäre also, abgesehen von den anderen Kinken im Kode, an dieser Stelle :

Code: Alles auswählen

If HowMany > 0   
  Debug "HowMany = " + Str(Howmany) ; chars) ??? 
  Debug "Details = " + WhichChars ; ??? wird in der Prozedur nicht gesetzt !
  ProcedureReturn(1)  
Else 
  ProcedureReturn(0) 
EndIf 
Hinweise :
- Variablen nur einmal vereinbaren
- in der Prozedur die dort vereinbarten Variablen benutzen
- was soll denn in String Details gesammelt werden?

Verfasst: 22.08.2005 10:46
von Tafkadasom2k5
OK-soweit alles klar....nun sieht der code (Mit folgendem Besipiel-Code) aus

Code: Alles auswählen

Procedure CheckCharsDetail(Eingabe.s,Notallowed.s)
  For I=1 To Len(Eingabe.s)
    
    Analyze.s =  Mid(Eingabe.s,I,1)
    
    For A=1 To Len(Notallowed.s)
      
      If Analyze.s = Mid(Notallowed.s,A,1)
        
        If Details.s = ""
           Details.s = Details.s + Mid(Notallowed.s,A,1)
        Else
          Details.s = Details + "," + Mid(Notallowed.s,A,1)
        EndIf
       
        
       HowMany.l = HowMany + 1
      EndIf
    
   Next
  Next
  
  If HowMany > 0
    Debug HowMany
    Debug Details
    ProcedureReturn(1)
  Else
    ProcedureReturn(0)
  EndIf
 
  EndProcedure

Eingabe.s = InputRequester("Eingabe","Wort eingeben das geprüft werden soll","")
Notallowed.s = InputRequester("Eingabe","Buchstaben eingeben, auf die das Wort geprüft werden soll (z.B. 'abcdefg123')","")

CheckCharsDetail(Eingabe,Notallowed)
Hoffe ihr könnt mir weiterhelfen...
Achja-danach müsste man die Variable "HowMany" und den String "Details" in die Mainschleife übergeben können-wie funktioniert das?also mit "Global" gehts nicht und mit nem Sternchen davor (also als Pointer) gings uch ned.....)

Danke für alles ersmal-und bitte-seid nachsichtig mit meinen Fehlern und erklärt sie mir-ich wills ja lernen... :allright:

Der Marc <)

EDIT: Meinen ersten (trotteligen Fehler) behoben.... :allright: <)

Verfasst: 22.08.2005 10:52
von Kiffi
> BTW: Der funktioniert auch nicht richtig vollständig

vielleicht magst Du mir erklären, was die [c]CheckCharsDetail()[/c]
überhaupt bezwecken willst. U.U. könnte ich dann erkennen, was an dieser
Prozedur fehlerhaft ist.

Grüße ... Kiffi

Verfasst: 22.08.2005 10:57
von Tafkadasom2k5
Hab ich schon behoben-warn Denkfehler meinerseits und der war nicht im Code (Logisch das er bei "DerMarc" und "Der" "D,e,r,r" heraussucht.... -ich hatt das R in Arne vergessen......) *mirgewaltig vor den Kopfschlag*

Ich will mir ne .pbi schreiben, in der alles das drinne ist, was ich meistens brauche wenn ich ein Programm schreibe-nur zum Training und weil ich da lust zu habe.....Ausserdem braucht man sowas ja immer mal...

Ok-jetzt nur noch die Sache mit der Übergabe der Variablen....
Also wie gibt man nen String und ne Variable in die Main-Schleife?

Gr33tz
Der Marc

Verfasst: 22.08.2005 11:11
von Kiffi
Tafkadasom2k5 hat geschrieben:(Logisch das er bei "DerMarc" und "Der" "D,e,r,r" heraussucht.... -ich hatt das R in Arne vergessen......)
ja, nee, is klar! :lol:
Tafkadasom2k5 hat geschrieben: Ok-jetzt nur noch die Sache mit der Übergabe der Variablen....
Also wie gibt man nen String und ne Variable in die Main-Schleife?


wie Du bereits geschrieben hast: Deklariere die Variable als 'Global' und
somit ist sie überall bekannt. Wenn's bei Dir nicht funktioniert, musst Du was
falsch gemacht haben. ;-)

Grüße ... Kiffi

Verfasst: 22.08.2005 11:16
von Tafkadasom2k5
ja, nee, is klar! Laughing
:oops: :oops: :oops: :oops: :oops:

Naja-jetzt scheints zu gehen...war bloss ne Sache der Variablen....
Vielen Dank ersmal....

Aer noch ne plöde Frage:

Wie setzt man dann n Pointer ein?Und wozu gibt es Pointer, wenn man doch eh den Befehl "Global" dafür missbraucht?

Verfasst: 22.08.2005 11:36
von Kiffi
> Wie setzt man dann n Pointer ein?

(PB) Was sind 'Pointer' und wie benutzt man diese?: http://forums.purebasic.com/german/viewtopic.php?t=19

> Und wozu gibt es Pointer, wenn man doch eh den Befehl "Global" dafür
> missbraucht?

oh, dann hast Du mich falsch verstanden. Globale Deklarationen von
Variablen haben nichts direkt mit Pointern zu tun. Sie dienen nur dazu,
Variablen, die man in mehreren Prozeduren oder Funktionen benötigt, eben
auch dort verwenden zu können.

Grüße ... Kiffi