我在任何地方都找不到......
我正在我的大学做一个项目 - 非常简单。我有一些用户可以提出的问题/可能性...在使用它之后,我想禁用它并且从不显示,因此用户可以继续“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变量,但我需要以某种方式定义该开关。
谢谢!
答案 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;
}