2015-02-11 114 views
0

我有一個程序,它從char數組獲取輸入,使用strtok函數檢查輸入是否包含單詞「up」或「down」。如果它包含單詞「up」,則我的b值設置爲false(即b = 0),並且我的c值也設置爲false。如果char數組包含單詞「down」,則b設置爲false,但是我的c值設置爲true(即c = 1)。兩個If語句一次執行,而不是一個

當第一個if語句執行時,字符串中包含單詞「up」,並在屏幕上打印結果字符時出現問題,但第二個如果還執行打印這些字符。任何輸入在這個問題將不勝感激

編輯:同樣的問題發生,如果我使用單詞「向下」,這兩個如果語句執行。

int moveC(int y, int x, int b, int i, int c) { 
    // int c is a static variable(static int c = FALSE;) defined in the previous function 
    int j; 
    int k; 

switch (b) //assume b is always false (which it is) 
{ 
    case FALSE: 
     if (c == 0) { 
      mvprintw(y, x, "^"); 
      refresh(); 

      for (j = 1; j <= i; j++) { 
       mvprintw(y + j, x, "."); 
       refresh(); 
      } 
      break; 
     } 

     if (c == 1) //tried using else if, same result 
     { 

      mvprintw(y, x, "^"); 
      refresh(); 

      for (j = 1; j <= i; j++) { 
       mvprintw(y - j, x, "."); 
       refresh(); 
      } 
      break; 
     } 
} 
return 0; 
} 
+0

您是否嘗試過使用逐步調試器?你觀察到了什麼? – Dai 2015-02-11 03:44:34

+0

不完全確定這是否可能(因爲我正在編寫我的樹莓PI)。原諒我的無知,但我不熟悉所謂的「階梯式調試器」。 – user20842454566 2015-02-11 03:47:19

+0

@ user20842454566嘗試學習使用gdb,作爲C程序員的生活將變得如此簡單。 – Snaipe 2015-02-11 08:03:55

回答

1

您的代碼很可能會執行兩次。贈品是你嘗試了一個if/else。在一個if語句的執行過程中,只有一個塊會被執行有史以來的

+0

根據你的回答,我仍然不明白如何解決我目前的問題,關心擴展? – user20842454566 2015-02-11 03:49:02

+0

在if/else語句中,代碼編譯爲代碼,其中它是_impossible_(爲了我們的參數)執行該語句的多個部分。我不知道你的程序是做什麼的,但它可能是你看到的一個時間條件,你的代碼執行速度比你預期的要快,並且在你看到那個輸出之前已經經過了多段代碼。也許在聲明之後停頓一下,這樣你可以看到輸出會有所幫助。 – BoldAsLove 2015-02-11 03:54:03

+0

假設你可以看到輸出,在函數的頂部在任何條件代碼之外添加一條print語句,你可以看到它被調用的次數以及每次調用中發生的任何輸出。 – 2015-02-11 04:16:54