C++程序未正确递减
C++ program not decrementing correctly
所以,我正在制作一个程序,你可以在其中将弹珠添加到袋子中。你选择你想要的颜色,然后选择你想要添加的弹珠数量,然后选择那个颜色的大理石是酷的、无聊的还是奇怪的。所以如果你想添加10个蓝色弹珠,那么你选择了酷。您将总共拥有十个弹珠和十个蓝色和酷炫的弹珠。我去从添加后已经存储的弹珠中随机移除一颗弹珠。由于某种原因,它根本不起作用。我尝试获取一个随机数,并将该随机数分配给已添加的当前大理石的描述。假设生成的随机数为 1,它将删除"红色冷弹珠"。我显然无法删除尚未添加的弹珠,所以我添加了一个do - while
循环,它基本上循环回随机数生成器,直到找到满足条件的数字。这是我的代码,有什么想法吗?:
我尝试更改我的 Do while 循环的位置。
void remove() {
do {
srand(time(0));
randomnum = (rand () % max) +1 ;
if (randomnum == 1 && redcool > 0) {
red--;
redcool--;
cout << "The random marble removed was a red and cool marble" <<endl;
}
else if (randomnum == 2 && redweird > 0) {
cout << "The random marble removed was a red and weirdl marble" <<endl;
red--;
redweird--;
}
else if (randomnum == 3 && redboring > 0) {
cout << "The random marble removed was a red and boring marble" <<endl;
red--;
redboring--;
}
else if (randomnum == 4 && greencool > 0) {
cout << "The random marble removed was a green and cool marble" <<endl;
green--;
greencool--;
}
else if (randomnum == 5 && greenweird > 0) {
cout << "The random marble removed was a green and weird marble" <<endl;
green--;
greenweird--;
}
else if (randomnum == 6 && greenboring > 0) {
cout << "The random marble removed was a green and boring marble" <<endl;
greenboring--;
green--;
}
else if (randomnum == 7 && bluecool > 0) {
cout << "The random marble removed was a green and cool marble" <<endl;
blue--;
bluecool--;
}
else if (randomnum == 8 && blueboring >0) {
cout << "The random marble removed was a blue and cool marble" <<endl;
blue--;
blueboring--;
}
else if (randomnum == 9 && blueweird > 0) {
cout << "The random marble removed was a blue and weird marble" <<endl;
blue--;
blueweird--;
}
}while (randomnum == 1 && redcool > 0 || randomnum == 2 && redweird >0 || randomnum == 3
&& redboring > 0 || randomnum == 4 && greencool > 0 || randomnum == 5 && greenweird >0 || randomnum == 6
&& greenboring > 0 || randomnum == 7 && bluecool > 0 || randomnum == 8 && blueweird >0 || randomnum == 9
&& blueboring > 0);
bag--;
预期的结果会说我添加了十个蓝色和酷炫的弹珠。当我去移除一个随机的大理石时,它会减少一个蓝色和凉爽的大理石,因为这是袋子里唯一的值。目前,甚至没有任何东西被删除。
原始问题中的代码存在缺陷,因为randomnum == 7
有多余的案例。编辑后的代码存在缺陷,因为循环中有srand
。
与原始代码相比变化最小的示例工作代码是:
#include <iostream>
#include <cstdlib>
using namespace std;
void remove(void)
{
int max = 9;
int randomnum;
int redcool = 2;
int redweird = 2;
int redboring = 2;
int red = redcool + redweird + redboring;
int greencool = 2;
int greenweird = 2;
int greenboring = 2;
int green = greencool + greenweird + greenboring;
int bluecool = 2;
int blueweird = 2;
int blueboring = 2;
int blue = bluecool + blueweird + blueboring;
int bag = red+green+blue;
srand(time(0));
do
{
randomnum = (rand() % max) + 1;
if (randomnum == 1 && redcool > 0)
{
red--;
redcool--;
cout << "The random marble removed was a red and cool marble" << endl;
}
else if (randomnum == 2 && redweird > 0)
{
cout << "The random marble removed was a red and weird marble" << endl;
red--;
redweird--;
}
else if (randomnum == 3 && redboring > 0)
{
cout << "The random marble removed was a red and boring marble" << endl;
red--;
redboring--;
}
else if (randomnum == 4 && greencool > 0)
{
cout << "The random marble removed was a green and cool marble" << endl;
green--;
greencool--;
}
else if (randomnum == 5 && greenweird > 0)
{
cout << "The random marble removed was a green and weird marble" << endl;
green--;
greenweird--;
}
else if (randomnum == 6 && greenboring > 0)
{
cout << "The random marble removed was a green and boring marble" << endl;
greenboring--;
green--;
}
else if (randomnum == 7 && bluecool > 0)
{
cout << "The random marble removed was a blue and cool marble" << endl;
blue--;
bluecool--;
}
else if (randomnum == 8 && blueweird > 0)
{
cout << "The random marble removed was a blue and weird marble" << endl;
blue--;
blueweird--;
}
else if (randomnum == 9 && blueboring > 0)
{
cout << "The random marble removed was a blue and boring marble" << endl;
blue--;
blueboring--;
}
} while (
randomnum == 1 && redcool > 0 ||
randomnum == 2 && redweird > 0 ||
randomnum == 3 && redboring > 0 ||
randomnum == 4 && greencool > 0 ||
randomnum == 5 && greenweird > 0 ||
randomnum == 6 && greenboring > 0 ||
randomnum == 7 && bluecool > 0 ||
randomnum == 8 && blueweird > 0 ||
randomnum == 9 && blueboring > 0);
bag--;
std::cout << "redcool = " << redcool << ".n";
std::cout << "redweird = " << redweird << ".n";
std::cout << "redboring = " << redboring << ".n";
std::cout << "red = " << red << ".n";
std::cout << "greencool = " << greencool << ".n";
std::cout << "greenweird = " << greenweird << ".n";
std::cout << "greenboring = " << greenboring << ".n";
std::cout << "green = " << green << ".n";
std::cout << "bluecool = " << bluecool << ".n";
std::cout << "blueweird = " << blueweird << ".n";
std::cout << "blueboring = " << blueboring << ".n";
std::cout << "blue = " << blue << ".n";
std::cout << "bag = " << bag << ".n";
}
int main(void)
{
remove();
}
请注意,当任何类别开始时为空时,此代码将在随机数生成选择后立即停止。如果希望仅在类别从非空转换为空时才停止,则必须进行更改。一种方法是使用另一个变量来指示是否已经看到这样的转变。在下面的代码中,当刚刚更改的计数器变为零时,名为trigger
的变量设置为 1:
#include <iostream>
#include <cstdlib>
using namespace std;
void remove(void)
{
int max = 9;
int randomnum;
int redcool = 0;
int redweird = 0;
int redboring = 0;
int red = redcool + redweird + redboring;
int greencool = 0;
int greenweird = 0;
int greenboring = 0;
int green = greencool + greenweird + greenboring;
int bluecool = 10;
int blueweird = 0;
int blueboring = 0;
int blue = bluecool + blueweird + blueboring;
int bag = red+green+blue;
srand(time(0));
int trigger = 0;
do
{
randomnum = (rand() % max) + 1;
if (randomnum == 1 && redcool > 0)
{
red--;
redcool--;
trigger = redcool == 0;
cout << "The random marble removed was a red and cool marble" << endl;
}
else if (randomnum == 2 && redweird > 0)
{
cout << "The random marble removed was a red and weird marble" << endl;
red--;
redweird--;
trigger = redweird == 0;
}
else if (randomnum == 3 && redboring > 0)
{
cout << "The random marble removed was a red and boring marble" << endl;
red--;
redboring--;
trigger = redboring == 0;
}
else if (randomnum == 4 && greencool > 0)
{
cout << "The random marble removed was a green and cool marble" << endl;
green--;
greencool--;
trigger = greencool == 0;
}
else if (randomnum == 5 && greenweird > 0)
{
cout << "The random marble removed was a green and weird marble" << endl;
green--;
greenweird--;
trigger = greenweird == 0;
}
else if (randomnum == 6 && greenboring > 0)
{
cout << "The random marble removed was a green and boring marble" << endl;
greenboring--;
green--;
trigger = greenboring == 0;
}
else if (randomnum == 7 && bluecool > 0)
{
cout << "The random marble removed was a blue and cool marble" << endl;
blue--;
bluecool--;
trigger = bluecool == 0;
}
else if (randomnum == 8 && blueweird > 0)
{
cout << "The random marble removed was a blue and weird marble" << endl;
blue--;
blueweird--;
trigger = blueweird == 0;
}
else if (randomnum == 9 && blueboring > 0)
{
cout << "The random marble removed was a blue and boring marble" << endl;
blue--;
blueboring--;
trigger = blueboring == 0;
}
} while (!trigger);
bag--;
std::cout << "redcool = " << redcool << ".n";
std::cout << "redweird = " << redweird << ".n";
std::cout << "redboring = " << redboring << ".n";
std::cout << "red = " << red << ".n";
std::cout << "greencool = " << greencool << ".n";
std::cout << "greenweird = " << greenweird << ".n";
std::cout << "greenboring = " << greenboring << ".n";
std::cout << "green = " << green << ".n";
std::cout << "bluecool = " << bluecool << ".n";
std::cout << "blueweird = " << blueweird << ".n";
std::cout << "blueboring = " << blueboring << ".n";
std::cout << "blue = " << blue << ".n";
std::cout << "bag = " << bag << ".n";
}
int main(void)
{
remove();
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址