在 C 中存储和迭代存储的值

时间:2021-02-19 20:59:25

标签: c function for-loop if-statement input

在下面的函数中,用户输入 10 个数字 5 存储在 X_users_inputsY_users_inputs 中,如果 X_users_inputs 值为 0 或 {{ 1}} 如果 k 是 1。但是 Y_users_inputs 语句是错误的我试图查看来自两个用户的所有存储值。我如何修复下面的 if 语句。

变量

k

功能

if-else

输出

#include <stdio.h>
int main(void)
{
  int input = 0, k = 0;
  char playerSelect[][2] = {"1", "2"};
  int X_users_inputs[10] = {0};
  int O_user_inputs[10] = {0};

  int s_count = 1;
  int l_count = 1;

预期输出

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

    scanf("%d", &input);

    if(k== 0){
        X_users_inputs[i-1] = input;
        for(int l =0; l < l_count; l++){
                printf("X user %d\n",X_users_inputs[l]);}
        ++l_count;
        }
    else if(k== 1) {
        O_user_inputs[i-1] = input;
        for(int s =0; s < s_count; s++){
            printf("Y user %d\n",X_users_inputs[s]);}
        ++s_count;}

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

1 个答案:

答案 0 :(得分:1)

问题是 i 在请求 XO 输入之间递增。所以第一个 X 输入进入 X_users_input[0],然后第一个 O 输入进入 O_users_input[1]。然后存储到 X_users_input[2]O_users_input[3]。如您所见,每个数组都在跳过一个元素。

相反,您可以使用 l_counts_count 作为每个数组的索引。从 0 开始它们以避免总是需要减去 1 来获取数组索引。我还建议使用更好的变量名称——如果玩家是 XO,请在所有变量中一致使用这些名称。

此外,您的主循环执行了 11 次,而不是 10 次。

int x_count = 0, y_count = 0;

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

    scanf("%d", &input);

    if(k== 0){
        X_users_inputs[x_count++] = input;
        for(int l =0; l < x_count; l++){
            printf("X user %d\n",X_users_inputs[l]);}
    }
    else if(k== 1) {
        O_user_inputs[y_count++] = input;
        for(int s =0; s < y_count; s++){
            printf("Y user %d\n",X_users_inputs[s]);}
    }

    k = k == 0 ? 1 : 0;
}
相关问题