c - 为什么 do-while 循环永远不会结束?

标签 c

我正在制作一个基于文本的游戏。我输入的内容之一是需要是特定角色的玩家类别。我对他们输入的每个现有玩家数量(即 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 循环上。这是一件简单的事情,但我无法找到与此匹配的现有问题。如有任何帮助,我们将不胜感激:)

最佳答案

将 ||(OR)替换为 &&(AND)

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,则第一个条件将为 true,这足以再次继续循环。但如果是 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就足以停止循环

关于c - 为什么 do-while 循环永远不会结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040732/

相关文章:

c - C中表达式的指针和右评估

c - 从另一个进程引用内存分配指针指向的元素时出现段错误

c - 停止 fgetc 根据输入数 + 1 重复循环?

c - 在c中的结构中包含一个文本文件

c - 请解释区别

c++ - 读取字符到(字符指针)

c - 断开客户端与服务器 TCP

c - jpeg文件格式解码

我可以从 c 中的 exe 文件中读取文本吗?

c - 加载PE header