【问题标题】:I'm stuck in a while loop in C我在 C 中陷入了一个 while 循环
【发布时间】:2021-04-16 05:29:31
【问题描述】:
if((selected[0]=='H')&&(selected[1]=='Y')&&((selected[2]-'0')<=4))
{
    integer_v=10+(selected[1]*100)+(selected[2]-'0');
    printf("%d", integer_v);
}
else
{
    while((selected[0]!='H')||(selected[1]=='Y')||((selected[2]-'0')<=4))
    {
        printf("Wrong input!(%s) Please try again:\n", selected);
        scanf(" %s", re_selected);
        strcpy(selected,re_selected);
    }
    integer_v=10+(selected[1]*100)+(selected[2]-'0');
    printf("%d", integer_v);
}

在我创建这个简单棋盘游戏的项目中,我无法摆脱这个 while 循环。这段代码的目的是检查我给出的输入(选择),它是一个字符数组,第一个是“H”,第二个是“Y”,第三个插槽中是否有一个从 1 到 4 的数字大批。但是当我陷入while循环时我做错了(第一次尝试成功)。即使满足要求,仍然会出现“输入错误”消息。 示例:

Choose which pawn you want to move:
HY5
Wrong input!(HY5) Please try again:
HY3
Wrong input!(HY3) Please try again:
HY4
Wrong input!(HY4) Please try again:

在这里,HY5确实不是必需的输入,因为5>4但是HY4可以但是代码仍然不接受它。

【问题讨论】:

  • selected 来自哪里?显示所有相关代码
  • Selected 是上面简单定义的给定输入。这是我给出的输入,例如 HY4 或 HY5。
  • 关键是你没有展示selected是如何定义的。够长吗?正确的类型,...?请始终显示编译最小示例所需的所有代码。
  • 我明白了。谢谢你的提醒!下次我会多加注意的。

标签: arrays c string loops while-loop


【解决方案1】:

while 语句的条件错误。

很容易添加!来否定第一个检查条件。

while(!((selected[0]=='H')&&(selected[1]=='Y')&&((selected[2]-'0')<=4)))

另一种方法是使用De Morgan's laws 否定条件:

while((selected[0]!='H')||(selected[1]!='Y')||((selected[2]-'0')>4))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2018-05-20
    相关资源
    最近更新 更多