c - 我的模拟不运行或不循环

标签 c loops if-statement random boolean

我必须回答以下问题:

在 Puzzlevania 的土地上,Aaron、Bob 和 Charlie 争论他们中的哪一个是有史以来最伟大的益智游戏。为了一劳永逸地结束争论,他们同意进行生死决斗。 Aaron 是一个糟糕的射手,只有 1/3 的概率命中他的目标。 Bob 稍微好一点,以 1/2 的概率命中他的目标。查理是一名神枪手,从不失手。击中意味着击杀,被击中的人退出决斗。为了补偿他们枪法技能的不平等,决定参赛者轮流开火,从亚伦开始,然后是鲍勃,然后是查理。循环将重复,直到有一个人站着。而那个人将作为有史以来最伟大的解谜者而被铭记。

我目前写了以下代码:

int puzzle_count = 0;                                   
double aaron_accuracy = 1.0 / 3.0;
double bob_accuracy = 1.0 / 2.0;
double charlie_accuracy = 1.0;
bool aaron_alive;
bool bob_alive;
bool charlie_alive;
double random;
double aaronwins = 0;
double bobwins = 0;
double charliewins = 0;
double aaron_percent = 0;
double bob_percent = 0;
double charlie_percent = 0;

printf("\n Who is the greatest puzzler of all time?");
while (puzzle_count < 10000) {
    aaron_alive = true;
    bob_alive = true;
    charlie_alive = true;
    while (((aaron_alive = true) && (bob_alive = true)) || 
        ((bob_alive = true) && (charlie_alive = true)) || 
        ((aaron_alive = true) && (charlie_alive = true))) {

        if (aaron_alive = true) {
            if (charlie_alive = true) {
                random = rand() % 100;
                if (random < aaron_accuracy * 100) {
                    charlie_alive = false;
                        if (random > aaron_accuracy * 100) {
                            charlie_alive = true;
                        }
                }
            }
            if (charlie_alive = false) {
                random = rand() % 100;
                if (random < aaron_accuracy * 100) {
                    bob_alive = false;
                        if (random > aaron_accuracy * 100) {
                            bob_alive = true;
                        }
                }
            }
        }
        if (bob_alive = true) {
            if (charlie_alive = true) {
                random = rand() % 100;
                if (random < bob_accuracy * 100) {
                    charlie_alive = false;
                        if (random > bob_accuracy * 100) {
                            charlie_alive = true;
                        }
                }
            }
            if (charlie_alive = false) {
                random = rand() % 100;
                if (random < bob_accuracy * 100) {
                    aaron_alive = false;
                        if (random > bob_accuracy * 100) {
                            aaron_alive = true;
                        }
                }
            }
        }
        if (charlie_alive = true) {
            if (bob_alive = true) {
                random = rand() % 100;
                if (random < charlie_accuracy * 100) {
                    bob_alive = false;
                        if (random > charlie_accuracy * 100) {
                            bob_alive = true;
                        }
                }
            }
            if (bob_alive = false) {
                random = rand() % 100;
                if (random < charlie_accuracy * 100) {
                    aaron_alive = false;
                        if (random > charlie_accuracy * 100) {
                            aaron_alive = true;
                        }
                }
            }
        }


        if (aaron_alive = true)
            aaronwins++;
        if (bob_alive = true)
            bobwins++;
        if (charlie_alive = true)
            charliewins++;

    }
    puzzle_count++;
}

if (aaronwins + bobwins + charliewins == 10000) {
    aaron_percent = aaronwins / 10000;
    bob_percent = bobwins / 10000;
    charlie_percent = charliewins / 10000;

    printf("\n  Aaron won %f/10000 or %.2f% of the time", aaronwins, aaron_percent);
    printf("\n  Bob won %f/10000 or %.2f% of the time", bobwins, bob_percent);
    printf("\n  Charlie won %f/10000 or %.2f% of the time", charliewins, charlie_percent);
}
return 0;

当我运行代码时,它没有返回任何错误或警告并打开但不运行模拟。我已多次阅读代码,但似乎找不到导致此问题的任何原因。

如果这是因为打印错误,我提前道歉。这是我参加的第一门编程类(class),我的代码编写和故障排除技能并不是最好的。

最佳答案

在这里

while (((aaron_alive = true) && (bob_alive = true)) || 
    ((bob_alive = true) && (charlie_alive = true)) || 
    ((aaron_alive = true) && (charlie_alive = true)))

这个

aaron_alive = true

第一个是作业。因此 while 的参数将始终为真。

你可能想要

while (((aaron_alive == true) && (bob_alive == true)) || 
    ((bob_alive == true) && (charlie_alive == true)) || 
    ((aaron_alive == true) && (charlie_alive == true)))

或者更直接一点:

while ((aaron_alive && bob_alive) || 
       (bob_alive && charlie_alive) || 
       (aaron_alive && charlie_alive))

关于c - 我的模拟不运行或不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50317110/

相关文章:

java - 如何修复我的子类循环,使其在主类中调用时仅循环一次?

java - if 和 else 语句未按预期工作

r - 查找一个字符串是否包含在 R 中的另一个字符串中

c - GCC 4.0.2 取消引用指向结构的双类型成员的指针会引发 SIGBUS 错误

c - 如何在运行时在 C 中声明数组的大小?

javascript - while 循环中激活函数时出现问题

r - 在 R 中编写一个包含 if/else 语句和 rowSums() 的函数,定义如何处理 NA

CLion Clang-Tidy 使用带符号整数操作数和二进制按位运算符

c - 在 C 源代码中搜索和替换,不触及注释

java - 循环验证和输出问题