Compilando código c com bool sem usar o padrão c99
Tentei compilar um código usando uma variável bool em C e incluí o cabeçalho stdbool, mas quando o compilei, não especifiquei que desejo compilá-lo com o padrão c99 (por isso foi compilado com ANSI C padrão), mas funcionou de qualquer maneira. Eu queria saber por que isso? Aqui está o código:
#include <stdio.h>
#include <stdbool.h>
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;
}
Também outra pergunta referente ao meu código. Na parte em que você está sendo perguntado se deseja sair do programa, testei-o com a seguinte entrada: n n y
E, por alguma razão, imprimiu para o console a pergunta pela quarta vez e não vejo o porquê. Eu defini-o para que, se a entrada for Y / y, a próxima iteração no loop while não deva ocorrer, mas por algum motivo a imprimiu novamente, alguém poderia me explicar o que fiz de errado?
EDIT: Então, eu editei o código um pouco, tentei testar coisas novas e notei que, com o seguinte código, se a entrada do usuário for Y / y, não sairá do loop:
#include <stdio.h>
#include <stdbool.h>
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;
}
Eu não sei por que fiz isso, mas adicionei uma chamada getchar () antes do loop while e tentei compilá-la dessa maneira e, em seguida, o programa funcionou bem, daí presumo que as funções fgets \ scanf interfiram na função getchar mas não sei por que alguém poderia explicar?