This might seem like a very simple question, but I am struggling with it. I have been writing iPhone apps with Objective C for a few months now, but decided to learn C Programming to give myself a better grounding.
In Objective-C if I had a UILabel called ‘label1’ which contained some text, and I wanted to run some instructions based on that text then it might be something like;
if (label1.text == @"Hello, World!")
{
NSLog(@"This statement is true");
}
else {
NSLog(@"Uh Oh, an error has occurred");
}
I have written a VERY simple C Program I have written which uses printf() to ask for some input then uses scanf() to accept some input from the user, so something like this;
int main()
{
char[3] decision;
Printf("Hi, welcome to the introduction program. Are you ready to answer some questions? (Answer yes or no)");
scanf("%s", &decision);
}
What I wanted to do is apply an if statement to say if the user entered yes then continue with more questions, else print out a line of text saying thanks.
After using the scanf() function I am capturing the users input and assigning it to the variable ‘decision’ so that should now equal yes or no. So I assumed I could do something like this;
if (decision == yes)
{
printf("Ok, let's continue with the questions");
}
else
{
printf("Ok, thank you for your time. Have a nice day.");
}
That brings up an error of “use of undeclared identifier yes”. I have also tried;
if (decision == "yes")
Which brings up “result of comparison against a string literal is unspecified”
I have tried seeing if it works by counting the number of characters so have put;
if (decision > 3)
But get “Ordered comparison between pointer and integer ‘Char and int'”
And I have also tried this to check the size of the variable, if it is greater than 2 characters it must be a yes;
if (sizeof (decision > 2))
I appreciate this is probably something simple or trivial I am overlooking but any help would be great, thanks.
Daniel Haviv’s answer told you what you should do. I wanted to explain why the things you tried didn’t work:
There is no identifier ‘yes’, so this isn’t legal.
Here, “yes” is a string literal which evaluates to a pointer to its first character. This compares ‘decision’ to a pointer for equivalence. If it were legal, it would be true if they both pointed to the same place, which is not what you want. In fact, if you do this:
The behavior is undefined. They will both point to the same place if the implementation collapses identical string literals to the same memory location, which it may or may not do. So that’s definitely not what you want.
I assume you meant:
The ‘sizeof’ operator evaluates at compile time, not run time. And it’s independent of what’s stored. The sizeof decision is 3 because you defined it to hold three characters. So this doesn’t test anything useful.
As mentioned in the other answer, C has the ‘strcmp’ operator to compare two strings. You could also write your own code to compare them character by character if you wanted to. C++ has much better ways to do this, including string classes.
Here’s an example of how you might do that: