簡體   English   中英

為什么 do-while 循環永遠不會結束?

[英]Why does the do-while loop never ends?

我正在制作一個基於文本的游戲。 我輸入的其中一件事是需要成為特定角色的玩家類。 我為他們輸入的每個現有玩家數量(即 pnum 變量)執行此操作。

typedef struct players {
  char class, upgrade1, upgrade2, upgrade3;
  int secondwarD, secondwarS;
  int funds; 
} players;

struct players p[pnum];

for(i=0;i<pnum;i++) {
    do {
      printf("Player %d insert your class:\n", i+1);
      p[i].class=getc(stdin);
    } while(p[i].class!='c' || p[i].class!='t' || p[i].class!='a' || p[i].class!='d');
}

不幸的是,盡管我插入了一個可能的字符,但它仍然停留在同一個玩家的 do+while 循環中。 這是一件簡單的事情,但我無法找到與此匹配的現有問題。 任何幫助表示贊賞:)

用 &&(ANDs) 替換 ||(ORs)

for(i=0;i<pnum;i++) {
    do {
      printf("Player %d insert your class:\n", i+1);
      p[i].class=getc(stdin);
    } while(p[i].class!='c' && p[i].class!='t' && p[i].class!='a' && p[i].class!='d');
}

想象一下用戶輸入char t 如果它是 OR 而不是 AND,則第一個條件將為真,這足以再次進行循環。 但是如果是 AND 所有條件都需要為 TRUE 才能繼續循環。 由於 second 將是 FALSE,所以 do-while 循環將終止。

簡而言之,

(p[i].class!='c' || p[i].class!='t' || p[i].class!='a' || p[i].class!='d')

將意味着任何人是TRUE就足以與循環繼續

但,

(p[i].class!='c' && p[i].class!='t' && p[i].class!='a' && p[i].class!='d')

意味着它們中的任何一個都是FALSE就足以停止循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM