C 程序立即以退出代码0结束-但它不应该';没有投入,我无法到达那里

C 程序立即以退出代码0结束-但它不应该';没有投入,我无法到达那里,c,C,构建成功。如果我打开“输出”窗口,它将显示: 程序以退出代码结束:0 但是我的程序是这样的,如果没有先接受用户输入,做一些事情,然后再接受另一个用户输入,这是不可能的,所有这些都在intmain()中 int main()所做的第一件事是循环获取p的输入,直到输入是所需的两个选项之一。因此,它不可能立即退出—它初始化p=0,并且在p为1或2之前不会退出循环 是否存在一些隐藏的错误,使得构建能够在没有它的情况下成功。。成功 int main(){ //vars while (TRU

构建成功。如果我打开“输出”窗口,它将显示:

程序以退出代码结束:0

但是我的程序是这样的,如果没有先接受用户输入,做一些事情,然后再接受另一个用户输入,这是不可能的,所有这些都在
intmain()

int main()
所做的第一件事是循环获取
p
的输入,直到输入是所需的两个选项之一。因此,它不可能立即退出—它初始化
p=0
,并且在
p
为1或2之前不会退出
循环

是否存在一些隐藏的错误,使得构建能够在没有它的情况下成功。。成功

int main(){
    //vars
    while (TRUE){
        //play computer or human?
        while (!(p == 1 || p == 2)) {
            printf("Single player or two player? (1/2): ");
            scanf("%d", &p);
        }

        if (p==1) {
            //play computer
        }

        else {
            //snip
        }

        printf("%s won the game! Play again?", winner);
        scanf("%s", playagain);
        if (strncmp(playagain,"no",2)==0){
            break;
        }
    }
    return 0;
}

打印出大写字母
TRUE
的定义。我见过一些雄心勃勃但缺乏经验的人用它做奇怪的事情。您甚至可能没有进入主
循环,而
循环

printf("TRUE is %d\n",TRUE);

如果这不是零,那么您的问题在别处。

代码在哪里?我们能看一下吗?有点长,我想我说的就足够了。我要补充一点。请输入足够的代码,使之成为一个小型的、自包含的、可编译的示例(SSCCE)程序,演示这个问题。这将让我们帮助您避免猜测,并且您可能会在提出SSCCE的过程中意识到问题所在。只需使用调试器运行它,以确保您的假设是正确的。问题最初也用xCode标记。您是在xCode的main.m中运行它,还是在xCode项目或纯c(编辑器+gcc)中作为添加的c文件运行?TRUE是
typedef enum bool{TRUE,FALSE}bool。这就是问题所在。。它实际上不是一个真正的布尔值,所以它对
的计算结果不是1,而
。。。我想当我进入循环时,我已经忘记了我自己的定义是真的。我在Python方面有更多的经验,其中包括布尔类型,while true非常有意义。
while(true)
在C中也有意义,只要
true
有一个合理的值(其中合理的意思是它有值1)。然而,我认为大多数C程序员要么使用
stdbool.h
中的布尔类型(一个C99加法),要么只使用0或1。我认为今天我将避免创建自己的类型:“代码> Boo.<代码>,因为它将运行代码,使用代码< > STDBOOL .H/COD>或如果/在C++上下文中使用时。可能只是使用
enum{FALSE,TRUE}