使用bool编译c代码而不使用c99标准

我试图在C中使用bool变量编译代码并且我已经包含了stdbool头但是当我编译它时我没有指定我想用c99标准编译它(因此它是用ANSI C编译的)标准)但无论如何它都有效。 我想知道为什么会这样? 这是代码:

#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; } 

还有关于我的代码的另一个问题。 在您被问到是否要退出程序的部分中,我使用以下输入进行了测试:n n y

由于某种原因,它第四次打印到控制台的问题,我不明白为什么。 我设置它如果输入是Y / y,while循环中的下一次迭代不应该发生,但由于某种原因它再次打印,有人可以解释我做错了吗?

编辑:所以我编辑了一些尝试测试新东西的代码,我注意到如果用户输入为Y / y,则使用以下代码,它不会出现在循环中:

 #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; } 

我不知道为什么我这样做但是我在while循环之前添加了一个getchar()调用并尝试以这种方式编译它然后程序工作正常,从此我假设fgets \ scanf函数干扰了getchar函数但我不确定为什么有人会解释?

大多数C编译器都使用扩展来扩展基本语言。 一个这样的扩展可能是让stdbool.h在C90模式下工作。 如果你真的想,你通常可以用一些编译器标志来关闭大多数扩展,例如gcc使用-std=c90 。 不确定额外的标题,毕竟文件仍然存在,所以无论模式如何,它都可能被包括在内。

对于第二个问题,尝试单步执行程序,在每一步打印c的值。 它应该使发生的事情变得相当明显。

关于第二个问题:

您的代码决定是否离开程序是奇怪的,它可以更简单的方式:

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

当代码更简单时,它就更难搞错。

stdbool.h为您定义bool,true和false – 标题本身不依赖于您传入的语言标准,只要您在系统上有标题即可。 编辑 – 这可能只是股票osx标题的情况。 gcc的标题(4.8)看起来不会起作用。

退出循环的逻辑看起来不像你描述你想要它做什么。 你仍在测试你y / Y部分中的前一个字符,即使你在那时再次打印出问题。 我建议使用调试器逐步执行代码 – 这将使您更清楚地了解正在发生的事情。 现在和将来,调试器对您来说将是一个非常重要的学习工具。 🙂

您可能需要这样的代码(删除代码中的第一个printf问题):

 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; } }