Hvordan sammenligner jeg strengene korrekt?
Jeg forsøger at få et program til at lade en bruger indtaste et ord eller tegn, gemme det og derefter udskrive det, indtil brugeren skriver det igen og afslutter programmet. Min kode ser således ud:
#include <stdio.h>
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
gets(input);
printf("I will now repeat this until you type it back to me.\n");
while (check != input)
{
printf("%s\n", input);
gets(check);
}
printf("Good bye!");
return 0;
}
Problemet er, at jeg bliver ved med at få udskrivning af indtastningsstrengen, selv når brugerens indtastning (check) stemmer overens med den oprindelige (input). Sammenligner jeg de to forkert?
167
3
Du kan ikke (med fordel) sammenligne strenge ved hjælp af
!=
eller==
, du skal brugestrcmp
:Grunden til dette er, at
!=
og==
kun sammenligner basisadresserne for disse strenge. Ikke indholdet af selve strengene.Ok, et par ting: Det er usikkert at bruge
gets
og bør erstattes medfgets(input, sizeof(input), stdin)
, så du ikke får et bufferoverløb.Dernæst skal du bruge
strcmp
for at sammenligne strenge, hvor en returværdi på 0 indikerer at de to strenge passer sammen. Ved at bruge lighedsoperatorerne (dvs.!=
) sammenlignes adressen på de to strenge, i modsætning til de enkeltekar
s i dem.Bemærk også, at
fgets
gemmer også newline-tegnet'\n'\n'
i bufferen, selv om det i dette eksempel ikke vil give problemer, hvilketgets()
ikke gør. Hvis du sammenlignede brugerens input frafgets()
med en string literal som f.eks."abc"
ville det aldrig passe sammen (medmindre bufferen var for lille, så'\n'
ikke ville få plads i den).EDIT: og slået af den superhurtige Mysticial endnu en gang.
Du kan ikke sammenligne arrays direkte på denne måde
Du skal sammenligne dem karakter for karakter; til dette formål kan du bruge en funktion og returnere en boolsk værdi (Sand:1, Falsk:0). Derefter kan du bruge den i testbetingelsen i while-loop'en.
Prøv dette: