我根据此代码C++ Random number guessing game
制作了一个类别分配的数字游戏我首先尝试使用“goto”功能制作它并且效果很好,但是我的老师说我需要使用“while”来制作它。
问题是程序在“Troppo basso”之后继续关闭!和“Troppo alto!”消息出现,有人可以告诉我为什么吗?
#include <iostream>
using namespace std;
int main()
{
int Nuovogioco = 0;
if (Nuovogioco == 0)
{
srand(time(0));
int Numero = rand() % 100 + 1;
int prova;
int Variabile;
int Periodo = 0;
Nuovogioco++;
{
while (Periodo <1 )
{
cout << "A che numero sto pensando da 1 a 100? ";
cout <<endl;
cout << "Se vuoi uscire digita e quando vuoi!";
cout <<endl;
cout << "Inserisci un numero: ";
Periodo++;
}
while (Periodo > 0)
{
cin >> prova;
if (prova > Numero)
{
cout << "Troppo alto!" <<endl;
Periodo--;
}
if (prova < Numero)
{
cout << "Troppo basso!" <<endl;
Periodo--;
}
if (prova == Numero)
{
cout << "Hai vinto! Se vuoi rigiocare digita 1, altrimenti digita 2!";
cin >> Variabile;
{
if (Variabile == 1)
{
Variabile--;
Nuovogioco--;
}
if (Variabile == 2)
{
cout << "Byebye! ";
system ("pause");
}
}
}
}
}
}
}
答案 0 :(得分:4)
您的程序没有崩溃,它只是提前退出。问题是两个循环之间的相互作用:
while (Periodo <1 )
{
/* output */
Periodo++;
}
Periodo
以0
开头,第一次迭代后的值为1
。循环终止,然后传递给下一个循环:
while (Periodo > 0)
{
cin >> prova;
if (prova > Numero)
{
cout << "Troppo alto!" <<endl;
Periodo--;
}
if (prova < Numero)
{
cout << "Troppo basso!" <<endl;
Periodo--;
}
if (prova == Numero)
{
cout << "Hai vinto! Se vuoi rigiocare digita 1, altrimenti digita 2!";
cin >> Variabile;
{
if (Variabile == 1)
{
Variabile--;
Nuovogioco--;
}
if (Variabile == 2)
{
cout << "Byebye! ";
system ("pause");
}
}
}
}
由于Periodo
的值为1
,因此它会进入循环。然后递减Periodo
,它取值0
循环终止,因为0
不是>0
。
您需要将Periodo
设置为您想要的猜测次数(目前只有1
)。
尝试将Periodo
初始化为该数字:
int Periodo = 10; //set to number of guesses
你可以删除第一个循环,它实际上并没有做任何事情。只需留下你的输出:
cout << "A che numero sto pensando da 1 a 100? " << cout <<endl;
cout << "Se vuoi uscire digita e quando vuoi!" << cout <<endl;
cout << "Inserisci un numero: " << cout <<endl;
当前循环的位置。