I have written code that uses the fgets function with multiple conditions that call other functions within the code, namely aMethod and bMethod.
int main(void) {
char buffer[1024];
while (fgets(buffer, 1024, stdin)) {
if ((strcasecmp(buffer,"a")) == 0) {
aMethod();
}
if ((strcasecmp(buffer, "b")) == 0) {
bMethod();
}
}
}
I'm not sure why it doesn't reach the if statements. Any help would be great, thankyou.
If in doubt, print it out:
int main(void) {
char buffer[1024];
while (fgets(buffer, 1024, stdin)) {
fprintf(stderr, "BUFFER is [%s]\n", buffer); /* <==== */
if ((strcasecmp(buffer,"a")) == 0) {
aMethod();
}
if ((strcasecmp(buffer, "b")) == 0) {
bMethod();
}
}
}
you will find a lot of errors this way.
You forget that fgets()
leaves the newline in the buffer (unless the entered line is too long). So the input string cannot compare equal to either of the strings you are comparing with.
Also, there is no such function as strcasecmp()
in standard C. It is a POSIX function.
You forgot that fgets
consumes the \n
character into the buffer. Strip it off by using a cool function strcspn()
from string.h
. Add the following just before the if
statements:
buffer[strcspn(buffer,"\n")] = 0;
or else, you could use the familiar strlen()
function:
size_t len = strlen(buffer);
if(len > 0 && buffer[len-1] == '\n')
buffer[len-1] = 0;
来源:https://stackoverflow.com/questions/29875285/code-not-reaching-statements-using-fgets