2013-11-26 15 views
1

我正在努力与3个变量之间的“IF”比较。 该程序应该配备轮子1,2和3,并且如果所有3个都相同,则奖励5英镑,如果3个中的2个相同,则奖励2英镑。与多个==比较(水果机任务)

但有时它不工作(给我£5,即使没有一个是相同的)

请会有人来看看,并告诉我如何解决它?

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

const char *symbol[4] = {" bell ", " orange ", " cherry ", "horseshoe"}; 

int main() 
{ 
    srand(time(NULL)); 
    int playagain =1; 
    int wheel_1,wheel_2,wheel_3; 
    int i; 
    int money=10; 
    int j = (rand()%30)+10; 
    int start=1; 
    int k; 
    printf("you have £%d. Press any key to gamble £1\n", money); 
    getchar(); 

    while(playagain == 1) 
    { 

    for (i=0; i<j; i++) 
    { 
     printf("\033[2J\033[0;0f"); 
     printf("\033[%d;%df", 0, 0); 
     wheel_1 = (rand()%4); 
     wheel_2 = (rand()%4); 
     wheel_3 = (rand()%4); 
     printf("%s  ", symbol[wheel_1]); 
     printf("%s  ", symbol[wheel_2]); 
     printf("%s  \n", symbol[wheel_3]); 
     for (k=0; k<10000000; k++) 
     { 
     } 
    } 
    printf("%d, %d, %d\n", wheel_1, wheel_2, wheel_3); 
    if (wheel_1 == wheel_2 == wheel_3) 
    { 
     printf("Congrats! You win £5\n"); 
     money = (money+5)-1; 
    } 
    else if (wheel_1 == wheel_2 || 
     wheel_1 == wheel_3 || 
     wheel_2 == wheel_3) 
    { 
     printf("Congrats! You win £2\n"); 
     money = (money+2)-1; 
    } 
    else 
    { 
     printf("Unlucky, you have lost your £1\n"); 
     money--; 
    } 

    printf ("You now have £%d\n", money); 

    char *replay; 
    printf ("would you like to play again?"); 
    scanf ("%s", &replay); 

    if (strcmp(&replay, "yes") == 0) 
    { 
     playagain = 1; 
    } 
    else 
    { 
     playagain = 0; 
    } 
    } 

} 
+1

与[此问题]非常相似(http://stackoverflow.com/q/6961643/827263)。 'x == y == z'相当于'(x == y)== z'; 'x == y'产生'0'或'1',然后将其与'z'进行比较。 –

+0

使用'(x&y&z)==(x | y | z)'。 ;) –

回答

2

您使用if比较车轮的方式是错误的

if (wheel_1 == wheel_2 == wheel_3)// Wrong 

您应该使用

if ((wheel_1 == wheel_2) && (wheel_2 == wheel_3)) 

几乎所有用C返回一个值。表达式wheel_2 == wheel_3也返回一个值。如果条件为false,则此表达式返回的值等于零,否则它不为零(将为1)。 当你做wheel_2 == wheel_3并假设表达式是true那么它将返回1.这再次与wheel_1比较,如wheel_1 == 1

1

如上所述,它看起来像你需要:

if((wheel_1 == wheel_2) && (wheel_2 == wheel_3)) 

让我们知道,如果它的工作原理是这样:-)。

0

是的,在这里你将不得不保持比较值的不同, 因为x = y = z会返回一个值,即使它们不是这样,它也会是真的。

因此,如果(x == y)& & if(y == z),那么您将它们保留为相关属性,因此您自然会得到x = z。