Comstackndo el código c con bool sin usar el estándar c99

He intentado comstackr un código usando una variable bool en C y he incluido el encabezado stdbool, pero cuando lo compilé no especifiqué que quería comstackrlo con el estándar c99 (por lo que fue comstackdo con ANSI C). estándar) pero funcionó de todos modos. Me preguntaba por qué es eso? Aquí está el código:

#include  #include  int main() { char name[20]; printf("What's your name ? "); gets(name); printf("Nice to meet you %s.\n", name); bool exit = false; char c; printf("Do you wish to exit the program ? (Y/N) "); while (!exit) { c = getchar(); if (c == '\n') { continue; } printf("Do you wish to exit the program ? (Y/N) "); if (c == 'Y' || c == 'y') { exit = true; } } printf("Have a nice day %s\n", name); return 0; } 

También otra pregunta con respecto a mi código. En la parte en la que se le pregunta si desea salir del progtwig, lo he probado con la siguiente entrada: n n y

Y por alguna razón imprimió por cuarta vez a la consola la pregunta y no veo por qué. Lo he configurado de modo que si la entrada es S / y la siguiente iteración en el bucle while no debería tener lugar pero por alguna razón lo imprimió de nuevo, ¿podría alguien explicarme qué hice mal?

EDITAR: Así que edité el código un poco, traté de probar cosas nuevas y noté que con el siguiente código, si la entrada del usuario es S / y, no saldrá del bucle:

 #include  #include  int main(int argc, char* argv[]) { for(int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]); char name[20]; printf("What's your name ? "); gets(name); char lastname[20]; printf("%s what's your last name ? ", name); fgets(lastname, 20, stdin); int age; printf("%s %s what's your age? ", name, lastname); scanf("%d", &age); bool exit = false; char c; while (!exit) { printf("Do you wish to exit the program ? (Y/N) "); c = getchar(); getchar(); if (c == 'Y' || c == 'y') exit = true; } printf("Have a nice day %s %s.\n", name, lastname); return 0; } 

No sé por qué lo hice, pero agregué una llamada a getchar () antes del bucle while y traté de comstackrlo de esta manera y luego el progtwig funcionó bien. A partir de esto, asumo que las funciones fgets \ scanf interfieren con la función getchar. pero no estoy seguro de por qué alguien podría explicar?

La mayoría de los comstackdores de C extienden el lenguaje base con extensiones. Una de estas extensiones podría ser permitir que stdbool.h funcione incluso en modo C90. Si realmente lo desea, normalmente puede desactivar la mayoría de las extensiones con algún indicador de comstackdor, por ejemplo, para el uso de gcc -std=c90 . No estoy seguro de los encabezados adicionales, el archivo sigue allí después de todo, por lo que probablemente se puede incluir sin importar el modo.

Para su segunda pregunta, intente recorrer el progtwig e imprimir el valor de c en cada paso. Debería hacerlo bastante obvio lo que está sucediendo.

Sobre la segunda pregunta:

Su código que decide dejar el progtwig o no es extraño, se puede hacer de una manera más simple:

 int c=0; do{ if(c!='\n') puts("Do you wish to exit the program? (Y/N) "); c=getchar(); }while(c!='y' && c!='Y'); 

Cuando el código es más simple, es más difícil equivocarse.

stdbool.h define bool, true y false para usted: el encabezado en sí no depende del idioma estándar que pase, siempre que tenga el encabezado en su sistema. EDITAR – este solo puede ser el caso para el encabezado de osx en stock El encabezado de gcc (4.8) no parece que funcione.

Su lógica para salir del bucle no se parece a cómo describe lo que quiere que haga. Aún está probando el carácter anterior en su sección y / Y, aunque imprimió la pregunta nuevamente en ese momento. Le sugiero revisar su código con un depurador, esto le dejará más claro lo que está sucediendo. El depurador será una herramienta de aprendizaje increíblemente importante para usted, ahora y para siempre. 🙂

Probablemente desee algo como esto para su código (elimine la primera pregunta de printf en su código):

 while (!exit) { printf("Do you wish to exit the program ? (Y/N) "); c = getchar(); if (c == '\n') { continue; } if (c == 'Y' || c == 'y') { exit = true; } }