2017-09-02 61 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這個完美的作品。 –