条件while while循环(此社区的新用户)

时间:2017-11-03 00:06:10

标签: c++

我是这个网站的新手。 我是一名新手,我正在创建一个简单的游戏,名为pick a number with code:

#include <iostream>
using namespace std;
int main()
{
    double number;
    char letter;
    char choice;
    while (number=true)

    {
        cout<<"enter a number from 0-10. no letters"<<endl;
        cin>>number;
        if (number==6){
            cout<<"you win"<<endl;
            system ("pause");}
        else if (number<0||number>10){
            cout<<"pick a number from the range given"<<endl;
            system ("pause");}
        else if (number!=6){
            cout<<"you lose"<<endl;
            system ("paeuse");}
        else if (letter!=6){
            cout<<"no letter. just a number"<<endl;
            system ("pause");}

        while (choice=true)
        {
            cout<<"would you like to play again? Y/y for yes, and N/n for no."<<endl;
            cin>>choice;
            if (choice=='Y','y'){
                cout<<"lets play again"<<endl;
                system ("pause");}
            else if (choice=='N','n'){
                cout<<"come again later"<<endl;
                system ("pause");
                return choice;}
            else if (choice!='Y','y','N','n'){
                cout<<"unknown. do you want to play?"<<endl;
                system ("pause");}
        }
    }
}

我的目标: 1)我想创建一个条件,如果用户输入一个字母,系统将提示用户选择一个不是字母的数字,因此用户将返回再次选择一个数字。

我的问题: 1)比赛结束后,我创造了3个条件,用户是否想再次参赛。当你看到代码时,

  1. a)如果我进入&#39; y&#39;或者&#39; Y&#39;,我将被引导到游戏中。
  2. b)如果我输入&#39; n&#39;或者&#39; N&#39;,程序将退出。
  3. 如果我输入一封信     如果不包含4个字母,系统会显示     你看到的输出,我将不得不再次回答这个问题。
  4. 无论我输入什么,第二个条件循环都不起作用。

    我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

比较与分配

=运算符用于分配。因此,while(choice=true)表示:

  • 循环的每次迭代,将choice设置为true
  • 使用choice的值作为条件

==运算符用于比较,例如while(choice == true)。这将做你期望的。

然而, == true是多余的。将Is the color of a banana being yellow a fact?Is the color of a banana yellow?进行比较。更恰当的说法就是while(choice)

system

使用system的做法是许多程序员不喜欢的,但这在技术上应该有效。这里的问题是拼写:paeuse - &gt; pause

多项选择

不幸的是,这种语法不符合你的想法:

if(a == 'b', 'c', 'd')

您需要完全指定每个条件,如下所示:

if((a == 'b') || (a == 'c') || (a == 'd'))

或者,您可以使用开关:

switch(choice){
case 'Y':
case 'y':
    /* yes code */
    break;
case 'N':
case 'n':
    /* no code */
    break;
default:
    /* none of the above */
}

循环何时结束?

double number;
while(number == true){

你是什么意思?这就像说Which is greater? A lightbulb or -7?它没有意义!

return

代码中的

return结束主循环,并将传递给它的值作为程序的退出代码。这可能远远超出你的意图。

未分配的变量letter

您在哪里使用letter?它仅用于将其与某些内容进行比较,但由于您未设置它,因此它是未定义的行为。

打开编译器中的警告

他们是你的朋友,而不是你的敌人。您可能不希望获得更多编译器错误,但如果您将其关闭,则必须以困难的方式找到相同的问题。

我将如何写这个

请注意,这是未经测试的。

#include <iostream>
#include <cctype>

int main(){
    const int MIN = 0;  // avoid magic numbers
    const int MAX = 10;
    do {
        int secret = 4; // Chosen by a fair dice roll
                        // Guaranteed to be random ;)
                        // TODO: pseudo-random number generation
        int guess;

        while(true){        // this could've been done with a do..while,
                            // but it ended up increasing the complexity
            std::cout << "Enter a number from " << MIN
                      << " to " << MAX << std::endl;
            std::cin  >> guess;

            if(guess >= MIN && guess <= MAX){
                break;
            }

            std::cout << "The provided number is not in range, try again!\n";
        }

        if(secret == guess){
            std::cout << "Congratulations!";
        }else{
            std::cout << "Sorry, good luck next time!";
        }

        char choice;
        do {
            std::cout << " Play again? [Y/N] ";
            std::cin  >> choice;
            choice = std::tolower(choice); // convert uppercase to lowercase, don't touch the rest
            if(choice == 'n'){
                return;
            }else if(choice != 'y'){
                std::cout << "Y or N please."
            }
        }while(choice != 'y');
    }
}

Analyse this program. If you don't understand something, ask! I hope I made it clear.