当前位置: 首页 > 知识库问答 >
问题:

为什么我的If和Else语句不起作用?(C++)

孟开宇
2023-03-14

我刚开始学C++,我试着做一个骰子游戏,用户输入一个1到6之间的数字,然后代码打印一个在这个范围内的随机数,如果y和z相同,你就赢了。

这是我的代码,但当我输入一个数组中没有的数字时,它的工作方式就好像它在数组中一样。


#include <iostream>
#include <stdlib.h>
#include <time.h>

int main() {
    for (; ; ) {
        int x[6] = { 1,2,3,4,5,6 }; //dice numbers
        int y;                      //user choice
        int z;                      // random number generated

        std::cout << "Pick a number between 1 and 6\n";
        std::cin >> y;

        if (y >= 1 || y <= 6) {     //if y is greater then or = to 1 or less then 
            std::cout << "Rolling dice, if your number is the correct number you win\n";
            srand(time(NULL));      //this makes rand() actually random.
            z = rand() % 6;
            std::cout << "The number is " << x[z] << "\n" << "The game will repeat..\n";
        }

        else {                      //if the num generated isn't within 1 or 6 this is printed
            std::cout << "ERROR: Generated number is not within 1 nor 6, try again.";

        }

        if (y == z) {
            std::cout << "Congratulations you rolled the right number";
        }
    }

(输入是y)(数组是x)(你需要赢的数字是z)

此外,我可能会更改它,使它只读取数组,这样用户甚至可以放入骰子的边数,如果这样做顺利的话。

共有2个答案

乜华翰
2023-03-14

我发现你的代码有五个问题。

首先,最好执行while(true)而不是for(;;)

其次,您的else块应该从终止if块的同一行开始。

第三,您应该在赢得游戏时插入break语句。

第四,您应该将条件if(y>=1y<=6)更改为if(y>=1&&y<=6)。两者的区别在于是OR逻辑运算符。如果y大于或等于1,或者y小于或等于6,这是真的,这本质上对每个整数都起作用。999会通过,因为它大于或等于1,而-999会通过,因为它小于或等于6。而且1到6之间的任何数都可以通过,因为它们同时通过y>=1和y<=6。如果您要插入一个AND运算符&来代替OR运算符,那么条件将通过,因为只有当y介于1和6之间时,条件才会为真。

第五,您应该将条件y==z的if块移动到嵌套在y>=1&&y<=6中。下面的代码是我所做的每一个更改:

    while (true) { //1
        int x[6] = { 1,2,3,4,5,6 };
        int y;
        int z;

        std::cout << "Pick a number between 1 and 6\n";
        std::cin >> y;

        if (y >= 1 && y <= 6) { //4
            std::cout << "Rolling dice, if your number is the correct number you win\n";
            srand(time(NULL));
            z = rand() % 6;
            std::cout << "The number is " << x[z] << "\n" << "The game will repeat..\n";
            if (y == z) { //5
                std::cout << "Congratulations you rolled the right number";
                break; //3
            }
        } else { //2
            std::cout << "ERROR: Generated number is not within 1 nor 6, try again.";

        }
    }
羊昊苍
2023-03-14

此条件:

if (y >= 1 || y <= 6)

对于y的所有值将为true。每个整数要么大于等于1,要么小于等于6。

你需要一个连词,像这样:

if (y >= 1 && y <= 6)

您还需要在y==z中断;,否则将导致无限循环。

 类似资料:
  • 问题内容: 我是Java的新手,正在尝试学习速记语句的概念。 我想出了下面的代码。但是,该代码将无法编译,并在(即?:)语句旁边显示错误。 有人可以告诉我为什么它不起作用吗? 对不起,如果我的问题对某些人听起来很愚蠢。我是Java新手。 在此先感谢您的帮助! 问题答案: 三元表达 是一个 表达式 ,而不是一个语句,因此不能在需要语句的地方使用。 您可以这样写: 因为这是一个声明。

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 我制作了这个简单的GUI程序,它可以计算特定字符序列的元音和辅音。计数器还可以,但是我对if-else语句有一个问题,当那个字符既不是元音也不是辅音时,我必须显示一条消息...代码如下: 它看起来是这样的: 我输入了一个没有任何特殊字符或数字的字符“序列”。但它仍然显示消息,其中它有元音和辅音以外的其他字符。if-else语句有问题吗?感谢您的帮助:)

  • 着色器语言GLSL中关于if语句、for语句的使用,和javascript语言、C语言中的if语句、for语句执行逻辑规则基本一致,这里默认你已经有一定的编程基础,也就不做过多讲解,只是简单说明一下。 单独使用if if(x>100){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色 } if-else形式 bool colorBool; // 根据布尔值

  • Swift 条件语句 一个 if 语句 后可跟一个可选的 else if...else 语句,else if...else 语句 在测试多个条件语句时是非常有用的。 当你使用 if , else if , else 语句时需要注意以下几点: if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。 if 语句后可以有 0

  • else语句可以与if语句结合使用。 else语句包含else语句中的条件表达式解析为0或FALSE值时执行的代码块。 else语句是一个可选语句, else后面最多只能有一个else语句。 语法 (Syntax) if...else语句的语法是 - if expression: statement(s) else: statement(s) 流程图 (Flow Diagram) 例