"Rune Klausen" <Rune.klausen@paradis.dk> skrev:
> if (inputlinie == 'R')
> printf("Du har trykket på R");
Jeg har, underligt nok, ikke set det nævnt i tråden, så nu gør jeg det
selv. I C kan man kun sammenligne tal ved hjælp af ==. Enkelttegn
såsom 'R' er i denne forbindelse tal, repræsenteret ved deres
ASCII-værdi[1]. Man kan derfor sammenligne et enkelt tegn med fx
char inputlinie[80];
if (inputlinie[0] == 'R')
// ens tegn
Hvis man imidlertid skal sammenligne flere tegn, altså hele ord, er
man nødt til at benytte funktionen strcmp(), som tager to tekststrenge
som argumenter og returnerer 0 hvis de er ens:
char inputlinie[80];
if (strcmp(inputlinie, "RET") == 0)
// ens strenge
Bemærk forskellen på apostrofferne omkring et enkelt tegn og
citationstegnene omrking en tekststreng. "R" er således en streng (med
længde 1) og kan ikke (med fornuftigt resultat) sammenlignes ved hjælp
af ==.
Som alternativ til strcmp() kan man manuelt lave en løkke, som
sammenligner hvert enkelt tegn:
char inputlinie[80];
char kommando[] = "RET";
int i = 0
while (inputlinie[i] && kommando[i] && inputlinie[i] == kommando[i])
++i;
if (inputlinie[i] == kommando[i])
// ens strenge
Funktionen strcmp() består stort set af en sådan løkke, men at lave
den selv har den fordel, at man kan ændre sammenligningen, fx til
toupper(inputlinie[i]) == toupper(kommando[i])
hvis man vil have at "RET" skal være lig med "Ret". Hvis jeg husker
ret indeholder standard C ikke en sammenligningsfunktion, der ikke
bekymrer sig om store/små bogstaver.
Hvis man bruger C++ har man std::string, som indeholder en operator==,
der uden videre kan sammenligne to strenge. Det er noget lettere, og
std::string er en af de meget gode grunde til, at C++ er sjovere end C
som første sprog.
Ovenstående udklip er ikke afprøvet, og kan således indeholde
tanketorsk, som jeg dog er sikker på så nok skal blive udpeget
.
Anders.
Footnotes:
[1] Eller hvilket tegnsæt computeren nu benytter.