我正在开展一个大项目,但在这里我陷入了这个项目的一小部分。目的是让事情发生的几率为 40%,所以我制作了一个由 4 个“1”和 6 个“0”组成的 10 个数字的数组,如果它随机为“1”,那么它就会发生,但我的条件不是工作时,它总是打印“abcd”,即使它随机“0”。这里有什么愚蠢的错误吗? 第二个计数器是让它每 3 秒发生一次
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#include "vtscreen.h"
int main(void){
int x, y, i=0;
int random1, random2, min;
int array[10] = {1,1,1,1,0,0,0,0,0,0};
srand(time(NULL));
//ClearScreen();
time_t start, end;
int elapsed;
time(&start); /* start the timer */
do {
time(&end);
elapsed = difftime(end, start);
//gotoxy(1, 15);
printf("Time elapsed: %.1d\n", elapsed);
if(elapsed == 0) continue;
min = elapsed%3;
if(min == 0){
random1 = array[rand() % 10];
printf("%d\n", random1);
if(random1 == 1){
printf("abcd");
}
}
}
while (1);
}
这是我被卡住的条件部分
printf("%d\n", random1);
if(random1 == 1){
printf("abcd");
}
更新: 所以我只是尝试将条件设为“random1 == 2”,但它不起作用,似乎当随机运行时,即使结果是“0”,如果它随机通过“1”,则条件的还在工作。有没有办法用随机数或任何解决方案来设置 40% 机会的条件?
最佳答案
您的计时逻辑将在可被 3 整除的秒内多次评估骰子掷出的结果。其中一些掷骰子将满足您的条件,并且将打印您的文本。因为当不满足条件时您不会打印任何内容,并且总是打印到相同的屏幕位置,因此您不会注意到。
一个快速解决方法是在掷骰子后重置开始
计时器。下面的程序说明了这一点。 (它还将掷骰子与计时逻辑分开。)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void roll(void)
{
int r = rand() % 10;
if (r < 4) {
printf("%d Hit!\n", r);
} else {
printf("%d Miss.\n", r);
}
}
int main(void)
{
time_t start = time(NULL);
srand(start);
while (1) {
time_t now = time(NULL);
if (difftime(now, start) >= 3) {
start = time(NULL);
roll();
}
}
return 0;
}
这是执行定时事件的一种非常粗糙的方法。如果您使用的是事件驱动框架,例如 GUI 工具包,其中用户所做的一切(单击鼠标、按下按键等)都是一个事件,您可以使用定时事件,您可以在其中设置超时或按照您的情况每隔一定时间间隔发生的事件。这样的解决方案可能更好,但依赖于平台。
关于c - "if"条件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855514/