2016-02-27 85 views
0

我有我的代碼運行,直到用戶輸入「0 0 0」來停止程序 但我的程序在一個循環後停止。我試圖在內部循環添加打印看什麼值分別爲,也許他們都得到設置0不知道爲什麼它退出循環(在C)

我的示例輸入

輸出
p = 4,S = 9,C = 6
p = 3,S = 6,C = 6
p = 2,S = 4,C = 6
p = 1,S = 0,C = 6
情景#1:MHR乘坐單人騎行線騎4次。

我可以看到,P,S,和C不都是0,所以我不知道爲什麼它擺脫了外循環時,它應該只是回去問了3用戶輸入值

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

int main(){ 

    int p,s,c,h,x=1,coaster; 

    while(p != 0 && s != 0 && c != 0){ 
     //number of parties, single riders, capacity of ride 
     scanf("%d%d%d",&p,&s,&c); 
     //allocate memory 
     int* parties = malloc(sizeof(int)*p); 

     for(h=0;h<p;h++){ 
      //get size of each party in line 
      scanf("%d",&parties[h]); 
     } 

     //find the faster line for each scenario 
     int t = 0; 
     while(p != 0 || s > 0){ 
      coaster = c - parties[t]; 
      s = s - coaster; 
      p--; 
      printf("p = %d, s = %d, c = %d\n",p,s,c); 
      if(p == 0 && s != 0){ 
       printf("Scenario #%d: MHR rides coaster #%d, using the regular line.\n",x,t+1); 
       break; 
      } 

      if(s <= 0 && p != 0){ 
       printf("Scenario #%d: MHR rides coaster #%d, using the single rider line.\n",x,t+1); 
       break; 
      } 

      if(s <= 0 && p == 0){ 
       printf("Scenario #%d: MHR rides coaster #%d, using either line.\n",x,t+1); 
       break; 
      } 

      t++; 
     } 

     x++; 
     free(parties); 

    } 

return 0; 
} 
+0

既然你沒有初始化P,S或C,該程序將立即如果他們退出恰巧最初爲零。此外,你的邏輯似乎是錯誤的 - 如果這些變量中的任何一個都爲零,那麼'(p!= 0 && s!= 0 && c!= 0)將是錯誤的。 –

回答

0

您正在使用的環路條件是有效的:p不爲零AND c不爲零AND s不爲零。因此,s爲零時,條件爲false,並退出循環。

你正在尋找的條件是NOT(p爲零,c爲零,s爲零):

!(p == 0 && c == 0 && s == 0) 

有計劃中的其他錯誤,你不初始化pcs,然後檢查其值。

+0

但我怎麼能初始化他們沒有用戶輸入數字第一?也許我應該改變它,然後呢? – Hispazn

+0

將它們設置爲一些假值(例如-1),只是爲了通過初始循環條件。該值將被'scanf'覆蓋,立即進入循環。正如你所建議的,你也可以使用do-while構造。 – isedev

+0

啊謝謝你,我改變了條件@Pooya提供的條件下面 – Hispazn

0

那麼,你必須:

int p,s,c,h,x=1,coaster; 
while(p != 0 && s != 0 && c != 0){ 

這是不好的。您檢查的值爲psc,但它們是未初始化的變量

+0

我進一步補充說,OP可能想在這種情況下使用do..while循環。 –

+0

是的,我也意識到,要麼只是改變做或初始化變量的東西不相干 – Hispazn

0

如果要退出,如果一切變爲零,更改:

while(p != 0 && s != 0 && c != 0) 

到:

while(!(p == 0 && s == 0 && c == 0)) 
+0

謝謝!沒有意識到我的狀況並不等同於我真正想要的狀況。 – Hispazn

+0

@Hispazn不客氣:-) – Pooya

+0

我認爲我沒有正確地做邏輯運算符,對不起,但你認爲你可以告訴我,如果接近尾聲的if語句的邏輯是正確的嗎?我正在嘗試其他示例輸入和它的錯誤輸入 – Hispazn