C - 禁用用户已使用的可能性

时间:2016-11-07 16:37:44

标签: c algorithm

我在任何地方都找不到......

我正在我的大学做一个项目 - 非常简单。我有一些用户可以提出的问题/可能性...在使用它之后,我想禁用它并且从不显示,因此用户可以继续“while”循环到另一个。

示例:

while (something == true)
{
printf("Your possibilities are:\n 1 - Use a hammer\n 2 - Use a pipe\n 3 - Use a chair\n");

choice = getchar();

switch (choice)
{
  case '1':
    someCode();
    break;
  case '2':
    someCode();
    break;
  case '3':
    someCode();
    break;
}}

这当然是一个例子。问题是,在用户使用锤子之后,会发生一些代码然后 - 我只想要2种可能性:“管道”和“椅子”。所以下一次机会将只是“双向”切换。在我的代码中,我有6种可能性,并为每个选择制作bool,并将所有六个bool组合在if-else中,然后为每种可能性写入一个开关是不可想象的。

这有什么解决方案吗?对于每种可能性(如果使用的话)都需要一个bool变量,但我需要以某种方式定义该开关。

谢谢!

1 个答案:

答案 0 :(得分:0)

创建项目列表和一组并行标记,以跟踪已使用的内容 一些伪代码如下

#include <stdint.h>
#include <stdbool.h>

const char *item[] =
    { "a hammer", "a pipe", "a chair", "an awl", "an hour", 0 };
#define ITEM_N (sizeof item/sizeof item[0] - 1)

// return EOF on end-of-file/input error
// return 0 when no choices
// return 0 when non-numeric data entered
// return 0 when 0 or too high a value entered
// return 0 when a used value is selected
int Choice(bool *Used) {
  int choice = -1;
  puts("Your possibilities are:");
  for (int i = 0; item[i]; i++) {
    if (test_if_value_i_has_not_been_used) {
      print_prompt;
      choice = 0;
    }
  }
  if (choice < 0) {
    puts(" None");
    return 0;
  }
  char buf[50];
  read_user_input_into(buf);  // return EOF if no input
  if (!an_int_was_entered(&choice) ) return 0;
  if (choice_in_range) return 0;
  if (was_choice_used_before) return 0;
  Used[choice - 1] = true;
  return choice;
}

int main(void) {
  bool Used[ITEM_N] = { 0 };  // clear all flags
  while (Choice(Used))
    ;
  return 0;
}