【问题标题】:Updating user inputs based on prompts C根据提示更新用户输入 C
【发布时间】:2021-02-16 00:36:13
【问题描述】:

下面的代码读取用户的输入,如果用户给出的input 介于两者之间 在 1 和 9 中,playerselect 数字 k 更新为 1 或 2。如果 input 超出范围,则重新向用户提示 input。但是有一个问题,在 2 提示后 k 值被更新。而不是导致Player 1 input两次的代码应该是Player 1 input,然后是Player 2 input

int main(void)
{
    char playerSelect[][2] = {"1", "2"};

    int k=0;

    for(int i=1; i <= 18; i++){
        printf("\nPlayer %s input:", playerSelect[k]);
        scanf("%d",&input);
        if ((i % 2 == 0) && (1<= input <= 9)){k = 0;}
        else if ((i % 2 == 1) && (1<= input <= 9)){k = 1;}
        else {printf("Input out of bounds please input again");}
    }
    return 0;
}

输出:

Player 1 input:10
Input out of bounds please input again
Player 1 input:2

Player 1 input:2

Player 2 input:4

想要的输出

Player 1 input:10
Input out of bounds please input again
Player 1 input:2

Player 2 input:2

Player 1 input:4

【问题讨论】:

  • k 未初始化使用。
  • @alex01011 我想我不明白
  • 在你的printf("\nPlayer %s input:", playerSelect[k]);中,第一次迭代中k的值是多少?
  • int k;改成int k = 0;
  • 很遗憾没有解决问题,但谢谢我已经更新了代码

标签: c for-loop if-statement debugging output


【解决方案1】:

好吧,每次超出范围输入时,您都必须循环直到获得正确的输入,然后更新k 值。

#include <stdio.h>

int main(void)
{
  int input = 0, k = 0;
  char playerSelect[][2] = {"1", "2"};

  for (int i = 1; i <= 18; i++)
  {
    printf("\nPlayer %s input: ", playerSelect[k]);

    scanf("%d", &input);

    while (input > 9 || input < 1)
    {
      puts("Input out of bounds please input again");
      
      printf("\nPlayer %s input: ", playerSelect[k]);

      scanf("%d", &input);
    }

    k = ((i % 2 == 0) ? 0 : 1);
  }
  return 0;
}

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多