I am trying to get a program to let a user enter a word or character, store it, and then print it until the user types it again, exiting the program. My code looks like this:
#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;
}
The problem is that I keep getting the printing of the input string, even when the input by the user (check) matches the original (input). Am I comparing the two incorrectly?
Use
strcmp
.This is in
string.h
library, and is very popular.strcmp
return 0 if the strings are equal. See this for an better explanation of whatstrcmp
returns.Basically, you have to do:
or
or
You can check this, a tutorial on
strcmp
.You can't compare arrays directly like this
You should compare them char-by-char; for this you can use a function and return a boolean (True:1, False:0) value. Then you can use it in the test condition of the while loop.
Try this:
Ok a few things:
gets
is unsafe and should be replaced withfgets(input, sizeof(input), stdin)
so that you don't get a buffer overflow.Next, to compare strings, you must use
strcmp
, where a return value of 0 indicates that the two strings match. Using the equality operators (ie.!=
) compares the address of the two strings, as opposed to the individualchar
s inside them.And also note that, while in this example it won't cause a problem,
fgets
stores the newline character,'\n'
in the buffers also;gets()
does not. If you compared the user input fromfgets()
to a string literal such as"abc"
it would never match (unless the buffer was too small so that the'\n'
wouldn't fit in it).EDIT: and beaten by the super fast Mysticial once again.
You can't (usefully) compare strings using
!=
or==
, you need to usestrcmp
:The reason for this is because
!=
and==
will only compare the base addresses of those strings. Not the contents of the strings themselves.Unfortunately you can't use
strcmp
from<cstring>
because it is a C++ header and you specifically said it is for a C application. I had the same problem, so I had to write my own function that implementsstrcmp
:I hope this serves you well.
This is very simple solution in which you will get your output as you want.