我刚开始学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)
此外,我可能会更改它,使它只读取数组,这样用户甚至可以放入骰子的边数,如果这样做顺利的话。
此条件:
if (y >= 1 || y <= 6)
对于y
的所有值将为true。每个整数要么大于等于1,要么小于等于6。
你需要一个连词,像这样:
if (y >= 1 && y <= 6)
您还需要在y==z
时中断;
,否则将导致无限循环。
我发现你的代码有五个问题。
首先,最好执行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.";
}
}