在猜猜游戏c ++中不计算尝试次数

时间:2018-10-11 11:45:28

标签: c++

我正在尝试用C ++制作的猜谜游戏遇到错误。这是以下结构:

  1. 伪生成器生成的数字介于1-50之间
  2. 用户将猜测伪生成器将生成哪个数字,如果用户输入错误,它将计算用户的尝试次数。
  3. 如果用户第一次猜对了,那么如果用户是第三次就猜对了。用户获得5分。如果用户最多进行了10次尝试,则该用户将获得1分。

问题在于增加,而不是增加。我创建了带有do语句并包含条件的while循环。但是我在其他有关堆栈溢出的文章中有所介绍,但是由于我是一个初学者,并且真的进入c ++,因此我很难在代码中实现它。

示例文章: Program to figure out number between 1 and 100 won't ever guess "100" because of rounding

// Zagros
//Roulette
// Grundläggande c++ programmering

#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;

bool error = true;
string namn = "";
int nummer;
int points;
int tries = 0;

int main()
{        
    cout << "Välkommen till gissa tal" << endl;

    cout << "vad är ditt namn?" << endl;
    cin >> namn;

    cout << "Välkommen \t" << namn << endl;

    cout << "Följande instruktioner är:" << endl
         << "(1)Du inskriver ett tal och sedan slumpas ett ovetande tal"
         << " och jämför om ditt tal är korrekt med det tal som slumpas."
         << endl
         << " Om det slumpade tal på första försök, blir rätt. Får du 10 "
         << "poäng, blir talet rätt på andra eller tredje försöker får du"
         << " 5 poäng. Om talet blir rätt under 10 försök så får du 1 poäng"
         << endl;

    cout << "Du har sedan alternativet att vinna kvitt eller dubbelt,,"
         << " vilket programmet generar 5 tal. Du har då ett försök att"
         << " gissa rätt tal av de 5 talen vid rätt gissning får du"
         << " dubbla poäng, vid fel gissning får du de kvarstående poängen du har"
         << endl;

    while (error)
    {
        do
        {                
            cout << "Vänligen skriv in ett nummer" << endl;
            cin >> nummer;

            if (nummer <= 50)
            {
                cout << "Tack för ditt nummer \t"
                     << "Du valde följande nummer"
                     << endl
                     << nummer
                     << endl;
                error = false;                    
            } else if (nummer > 50)
            {                    
                cout << endl
                     << "vänligen skriv in ett korrekt nummer" << endl;
                error = true;
            }
        } while(error);
    }
    // algorithm starting
    srand( (unsigned int)time(NULL));

    cout << "kommer slumpa nu" << endl;

    int slump = (rand() % 50) + 1;

    if (slump != nummer)
    {
        cout << "tyvärr blev det inte rätt" << endl;
        cout << slump << endl;
        tries = 0;
        cout << "number of tries" << tries << endl;
        error  = true;
    } else if(slump == nummer)
    {
        cout << "det blev helt rätt" << endl;
        tries = 0;
        error = false;
    }

    while(true);
    while(error);
}

1 个答案:

答案 0 :(得分:1)

几个问题。

cin >> namn不起作用,因为namn是一个字符串。除非您包含头文件#include <sring> 即使这样,cin也无法识别字符串中的多个单词。更好的方法是使用 getline(cin, namn);

您有while循环,该循环在代码中没有执行任何操作,最终将迫使您陷入无限循环。

else if (slump == nummer) 
  {
    cout << "det blev helt rätt" << endl;
    tries = 0;
    error = false;
  }** while (true);** //what does this do? this will eventually halt the program in infinite loop

最后一次while循环与上述相同,将迫使您进入无限循环。

while (error);

如果使用调试器并搜索收到的错误消息,则可以识别所有这些问题。我强烈建议您开始这样做。您将获得更快的结果。