Ik probeer een programma zo te krijgen dat het een gebruiker een woord of karakter laat invoeren, het opslaat, en het dan afdrukt totdat de gebruiker het opnieuw typt, en het programma afsluit. Mijn code ziet er als volgt uit:
#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;
}
Het probleem is dat ik het afdrukken van de input string blijf krijgen, zelfs wanneer de input van de gebruiker (check) overeenkomt met het origineel (input). Vergelijk ik de twee verkeerd?
Je kunt strings niet (nuttig) vergelijken met !=
of ==
, je moet strcmp
gebruiken:
while (strcmp(check,input) != 0)
De reden hiervoor is dat !=
en ==
alleen de basisadressen van die strings vergelijken. Niet de inhoud van de strings zelf.
Ok een paar dingen: gets
is onveilig en moet vervangen worden door fgets(input, sizeof(input), stdin)
zodat je geen buffer overflow krijgt'`.
Vervolgens, om strings te vergelijken, moet je strcmp
gebruiken, waarbij een return waarde van 0 aangeeft dat de twee strings overeenkomen. Het gebruik van de gelijkheidsoperatoren (d.w.z. !=
) vergelijkt het adres van de twee strings, in tegenstelling tot de afzonderlijke karakters
erin.
En merk ook op dat, hoewel het in dit voorbeeld geen probleem zal opleveren, fgets
het newline karakter, '\n'
ook in de buffers opslaat; gets()
doet dat niet. Als je de gebruikersinvoer van fgets()
zou vergelijken met een string literal zoals "abc"
zou het nooit overeenkomen (tenzij de buffer te klein was zodat het '\n'
er niet in zou passen).
EDIT: en weer verslagen door de supersnelle Mysticial.
Je kunt arrays niet direct vergelijken zoals dit
array1==array2
Je moet ze char-voor-char vergelijken; hiervoor kun je een functie gebruiken en een boolean (True:1, False:0) waarde teruggeven. Dan kun je die gebruiken in de testvoorwaarde van de while-lus.
Probeer dit maar eens:
#include <stdio.h>
int checker(char input[],char check[]);
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
scanf("%s",input);
printf("I will now repeat this until you type it back to me.\n");
scanf("%s",check);
while (!checker(input,check))
{
printf("%s\n", input);
scanf("%s",check);
}
printf("Good bye!");
return 0;
}
int checker(char input[],char check[])
{
int i,result=1;
for(i=0; input[i]!='\0' || check[i]!='\0'; i++) {
if(input[i] != check[i]) {
result=0;
break;
}
}
return result;
}