como - ¿El código no llega a las declaraciones usando fgets?
fgets stdin (3)
fgets()
que fgets()
deja la línea nueva en el búfer (a menos que la línea ingresada sea demasiado larga). Por lo tanto, la cadena de entrada no se puede comparar con cualquiera de las cadenas con las que compara.
Además, no existe una función como strcasecmp()
en el estándar C. Es una función POSIX.
He escrito un código que usa la función fgets con múltiples condiciones que llaman a otras funciones dentro del código, concretamente aMethod y bMethod.
int main(void) {
char buffer[1024];
while (fgets(buffer, 1024, stdin)) {
if ((strcasecmp(buffer,"a")) == 0) {
aMethod();
}
if ((strcasecmp(buffer, "b")) == 0) {
bMethod();
}
}
}
No estoy seguro de por qué no llega a las declaraciones if. Cualquier ayuda sería genial, gracias.
En caso de duda, imprímalo:
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();
}
}
}
encontrará muchos errores de esta manera.
Olvidaste que las fgets
consumen el caracter /n
en el buffer. strcspn()
usando una función cool strcspn()
de string.h
. Agregue lo siguiente justo antes de las declaraciones if
:
buffer[strcspn(buffer,"/n")] = 0;
o bien, puedes usar la función familiar strlen()
:
size_t len = strlen(buffer);
if(len > 0 && buffer[len-1] == ''/n'')
buffer[len-1] = 0;