2017-09-02 60 views
-3

嗨,我是一个begginer c程序员,我试图做一个过滤器应该改变一个变量取决于其他变量,但它似乎并没有改变变量g1出于某种原因。我真的很喜欢我能得到的任何帮助,因为我现在被困在这里。谢谢变量不变c

#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; 
} 

Appetintly我没有足够的细节,所以忽略这个即时通讯只是增加一些随机的细节。在初等数学中,变量是表示数字的字母字符,称为变量的值,可以是任意的,不完全指定的或未知的。

+7

'if(car == 2);':Remove ';' – BLUEPIXY

+1

一般来说,调试会很好。使用Visual Studio,在那里很容易。如果你在linux上,使用gdb,但对于初学者来说这很难。 (尽管如此。)但是,你总是可以分散'printf'并在这么小的一段代码中看到控制流。 (bluepix是对的,你明白为什么吗?) –

+0

程序是*不是数学世界。它有一些*改变*内部状态。阅读关于[语义](https://en.wikipedia.org/wiki/Semantics_(computer_science)) –

回答

0

我注意到你不指定的话sel1==0 你spesified它sel1>3sel1==3sel1==2sel1==1sel1<0应该发生什么,但你不指定的话sel1==0我想,如果SEL1是G1不改0,但是改变,否则 可能像下面

scanf ("%d ",&sel1); 

输入SEL1当条件后,你应该把一个空间并删除;if(car==2)if(car==3)

+0

您是否阅读过bluepix的评论?你明白吗? –

+0

是@PeterA。Schneider –

+0

我问,因为未指定的sel1 == 0不是'printf'格式中缺少的空格是OP程序无法运行的原因。它是空的,如果块。 –

1

首先,如@BLUEPIXY建议,您应该删除;

我会改变前两个SEL1条件仅有一个,比如这个:

if (sel1 < 1 || sel1 > 3) 
    printf("Invalid selection!\n"); 

然后我会用一个switch情况和if声明:

#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("Car= %d\n", car); 

    printf("Select a door beetween 1 and 3:\n"); 
    scanf("%d", &sel1); 


    if (sel1 < 1 || sel1 > 3) 
     printf("Invalid selection!\n"); 

    switch (sel1) 
    { 
    case 1: 
     if (car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     else if (car == 2) 
     { 
      g1 = 3; 
      g2 = 1; 
     } 
     else if (car == 3) 
     { 
      g1 = 2; 
      g2 = 1; 
     } 

     break; 

    case 2: 
     if (car == 1) 
     { 
      g1 = 3; 
      g2 = 2; 
     } 
     else if (car == 2) 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     else if (car == 3) 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
     break; 

    case 3: 
     if (car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     else if (car == 2) 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     else if (car == 3) 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
     break; 
    } 


    printf("Behind door, %d is a goat\n", g1); 


    getchar(); 
    getchar(); 

    return 0; 
} 

例子:

enter image description here

+0

'if(sel1 < 0 || sel1 > 3)'只允许有三种可能性。应该是'if(sel1 < 1 || sel1 > 3)' –

+0

我已经编辑了答案。谢谢! –

+0

非常感谢Cecho这个完美的作品。 –