【发布时间】:2018-02-11 13:20:03
【问题描述】:
嗨,我是一名初学者 c 程序员,我正在尝试制作一个过滤器,它应该根据其他变量更改变量,但由于某种原因它似乎没有更改变量 g1。我真的很感谢我能得到的任何帮助,因为我现在被困在这里。谢谢
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int car;
int g1;
int g2;
int sel1;
unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);
g1 = 0;
car = rand() % 3 + 1;
printf("%d\n",car);
printf("select a door beetween 1 and 3\n ");
scanf ("%d",&sel1);
if (sel1 < 0)
{
printf("Invalid selection!\n");
return 0;
}
if (sel1 > 3)
{
printf("Invalid selection!\n");
return 0;
}
if (sel1 == 1)
{
if(car == 1)
{
g1 = 2;
g2 = 3;
}
if (car == 2);
{
g1 = 3;
g2 = 1;
}
if (car == 3);
{
g1 = 2;
g2 = 1;
}
}
if (sel1 == 2)
{
if(car == 1)
{
g1 = 3;
g2 = 2;
}
if (car == 2);
{
g1 = 1;
g2 = 3;
}
if (car == 3);
{
g1 = 1;
g2 = 2;
}
}
if (sel1 == 3)
{
if(car == 1)
{
g1 = 2;
g2 = 3;
}
if (car == 2);
{
g1 = 1;
g2 = 3;
}
if (car == 3);
{
g1 = 1;
g2 = 2;
}
}
printf("Behind door %d is a goat\n",g1);
return 0;
}
显然我没有足够的细节,所以忽略这个我只是添加一些随机细节。在初等数学中,变量是表示数字的字母字符,称为变量的值,它可以是任意的、未完全指定的或未知的。
【问题讨论】:
-
if (car == 2);:删除; -
一般来说,调试会很好。使用 Visual Studio,在那里很容易。如果您使用的是 linux,请使用 gdb,但这对于初学者来说要困难得多。 (尽管尝试一下。)但是您总是可以分散
printfs 并在这么小的代码中查看控制流。 (而且 bluepix 是对的;你明白为什么吗?) -
程序不是一个数学世界。它有一些改变的内部状态。阅读semantics
-
作为风格问题:像这样的重复代码容易出错(它通常被复制和粘贴,通常有出错的机会)。当您复制和粘贴某些内容时,请考虑将其设为函数。这将成为一种反射。如果您可以使用公式计算不同的值(这里:g1 和 g2),那么就这样做。如果值不太规则,请将值存储在数组等中并查找它们。
-
Monty Hall 问题。在第一次输入“选择 1 到 3 之间的门”之后,测试
if (sel1 < 0)应该是if (sel1 < 1)。
标签: c variables initialization int