05. april 2017 - 23:04 Der er 6 kommentarer

ARDUINO - ET FORSTÅELSES SPØRGSMÅL OMKRING CHAR.

HEJ,

Jeg er ABSOLUT ikke nogen ørn til C++ og da slet ikke til Arduino C++ udgaven.

Men

I min UNO læser jeg en STRING ind i en InputString. Afslutter med CR.

Når jeg scanner / parser linien som følger:

(del af parser'en )

if ( char(InputString[0])  == char("A"))    (1)
..  Do something

Virker det ikke ,

men gør jeg følgende:

if ( char(InputString[0] == Ox41 )      (2)
..  Do something

Virker det:

(der han her være nogen parantesfejl, Forskelle mellem UPPER/Lower-case AsCIi , men ikke i den aktuelle kode. )

InputString[0] "re"defineres jo som en char i (1) og char("A") er jo osse en char. Det er dette jeg ikke kan se logikken i .

Kan nogen fortælle mig hvorfor (eller henvise til en side hvor jeg kan læse om det... )

Kristian
Avatar billede arne_v Ekspert
05. april 2017 - 23:24 #1
if ( char(InputString[0] == 0x41 )

er OK hvis du vil goere koden svaer at laese.

if ( char(InputString[0] == 'A' )

maa vaer eden korrekte og laeselige.

if ( char(InputString[0])  == char("A"))

kan jeg ikke tro vil compile.
Avatar billede arne_v Ekspert
05. april 2017 - 23:25 #2
I C og C++ er 'x' for en enkelt char mens "xyz" er for strenge som bestaar af 0 til mange chars efterfulgt af en 0 char.
Avatar billede bvirk Guru
05. april 2017 - 23:34 #3
char er blot et cast ikke en funktion - det gør intet udover at tillade at noget ellers deklareringsmæsigt ikke compatibelt kan sammenlignes.

"A" er af typen const char pointer - altså memory adressen hvor der ligger et tegn 'A' efterfulgt af en nul-byte.

Jeg tror du skrive

if (InputString[0] == 'A')

eller

if (InputString[0] == char(*"A"))
// idet højre side af lighedstegnet castes fra const char  til char - måske overflødigt.

Håber det forklarer lidt - uden compiler errors fulde ordlyd er kan det let blive en forkert forklaring.
06. april 2017 - 12:12 #4
HEJ,

Arne #1:

Du skriver:

"
if ( char(InputString[0] == 0x41 )

er OK hvis du vil goere koden svaer at laese.

if ( char(InputString[0] == 'A' )

maa vaer eden korrekte og laeselige.  "

Jeg er meget med dig (elendig kode), men som jeg også skriver VIRKER DEN KODE og det er ligesom et kriterie. Jeg ville osse helst bruge den sidste (if ( char(InputString[0] == 'A' ) ), men når jeg IKKE kan få den til at virke er der jo ikke mange andre muligheder.   

Men som BVIRK #3 skriver, tror jeg at fejlen(e) er fundet og jeg har fået en god forklaring på hvad det er jeg tror jeg gør forkert (bruger en pointer / fremfor en char). Jeg vil i hverfald prøve dette og hvis det funker, (som jeg håber) vil den fremtidige kode være som ( if inputString[n] == 'A' )  // eksempelvis  . Dvs meget mere læselig.

Tusind tak for input og forklaring.

Kr
Avatar billede arne_v Ekspert
08. april 2017 - 23:28 #5
bvirk har helt ret.

Jeg fik ikke slettet "char(" i det jeg postede.
09. april 2017 - 20:21 #6
Hej (igen),

Tak for tilbagemeldingen.

Jeg fik i går tid til at efterprøve noget af det I begge skrev i de tidligere indlæg og med betydeligt bedre resulater end de tidligere nævnte/beskrevne. Men der har været familiesammenrend  (LÆS: = familiefest)  hele dagen, så jeg har ikke nået at kommentere det.

Det viser sig (næsten selvfølgeligt) at jeg har blandet en masse sammen omkring dette og det har givet anledning til endnu mere forvirring og kaos. Nu skulle tingene været rettet ud (og jeg har en noget bedre forståelse af tingene i C) - forhåbentlig så meget, at jeg nu kan skrive den nødvendige kode i C og få den til at køre efter mit hovede.

OG nok engang 1000 tak for tilbagemeldingen.

KR
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester