【问题标题】:Variable not defined when outside scope超出范围时未定义变量
【发布时间】:2017-11-27 13:07:12
【问题描述】:

编写一个程序​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​在屏幕上。
该程序应该首先通过填充一个数组来开始五个骰子抛出,其中5个数字在1之间有5个数字​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​一个函数​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​则则将以将结果​​​​​​总和。
我收到第一个函数的错误消息,它说我没有定义我在“if”中定义的矩阵。

#include <stdio.h> 
int sumOfDie(int inputArray[], int arraySize); 
int drawDie(int inputArray[], int arraySize)
{
int i, row, column=0;

for (i=0; i<arraySize; i++)  //determine the graphic number from the random number
{
    if (inputArray[i]==1)
    {
        char matrix [3][4] = {{"   "},{" * "},{"   "}};
    }
    if (inputArray[i]==2)
    {
        char matrix [3][4] = {{"*  "},{"   "},{"  *"}};
    }
    if (inputArray[i]==3)
    {
        char matrix [3][4] = {{"*  "},{" * "},{"  *"}};
    }
    if (inputArray[i]==4)
    {
        char matrix [3][4] = {{"* *"},{"   "},{"* *"}};
    }
    if (inputArray[i]==5)
    {
        char matrix [3][4] = {{"* *"},{" * "},{"* *"}};
    }

    for (row=0; row<3; row++) //Print out the matrix
    {
        for(column=0; column<4; column++)
        {
            printf("%c     ", matrix[row][column]);
        }
        printf("\n");
    }
}

}
int sumOfDie(int inputArray[], int arraySize) 
{
    int i, sum=0;
    for (i=0; i<arraySize; i++)
    {
        sum=sum+inputArray[i];
    }
    return sum;
}



int main(void)
{
    int i;
    int inputArry[5];
    srand(time(NULL)); 


for(i=0; i<5; i++)
{
    inputArry[i] = rand()%5+1;
}

for (i=0; i<5; i++)
{
    printf("Number:%d\n", inputArry[i]);
}

drawDie(inputArry, 5);

sum = sumOfDie(inputArray,5)
printf("The sum of %i + %i + %i + %i + %i = %i", inputArry[0], inputArry[1], inputArry[2], inputArry[3], inputArry[4], sum);

return 0;
}

【问题讨论】:

  • 您的错误是因为char matrix 是在if 范围声明中定义的。离开 if 范围后,变量不再存在。尝试在for 循环之外定义数组。尽管如此,您将matrix 声明为一个字符,但您试图存储一个字符串而不是单个字符。

标签: c arrays matrix random


【解决方案1】:

在函数drawDie中,每个名为matrix的变量的作用域都被限制在声明它们的if语句中,这样以后就不能使用它们来打印了。

您可以在单个多维数组中收集表示骰子所需的所有字符串,然后打印您需要的字符串。

这是一种可能的实现方式(考虑六面骰子):

#include <stdio.h>

void print_n_times_in_a_row(const char *str, int n)
{
    for ( int i = 0; i < n; ++i )
    {
        printf(" %s", str); 
    }
    puts("");
}

void draw_dices(int* values, int n)
{
    static const char dice_str[][3][8] = {
        {{"       "},{"   *   "},{"       "}},  // 1
        {{" *     "},{"       "},{"     * "}},  // 2
        {{" *     "},{"   *   "},{"     * "}},  // ...
        {{" *   * "},{"       "},{" *   * "}},
        {{" *   * "},{"   *   "},{" *   * "}},
        {{" *   * "},{" *   * "},{" *   * "}}   // 6. Just in case...
    };

    // I'll print all the "dices" in a row   
    print_n_times_in_a_row("+-------+", n);
    for ( int j = 0; j < 3; ++j )
    {
        for ( int i = 0; i < n; ++i )
        {
            printf(" |%s|", dice_str[values[i] - 1][j]); 
        }
        puts("");
    }
    print_n_times_in_a_row("+-------+", n);
}


int main(void)
{
    int dices[] = {4, 2, 5, 6, 1, 3};

    draw_dices(dices, 6);
}

哪些输出:

+-------+ +-------+ +-------+ +-------+ +-------+ +---- ---+ | * * | | * | | * * | | * * | | | | * | | | | | | * | | * * | | * | | * | | * * | | * | | * * | | * * | | | | * | +-------+ +-------+ +-------+ +-------+ +-------+ +---- ---+

【讨论】:

    【解决方案2】:

    即使数组总是被创建,你也不应该声明条件数组 你应该在 if 语句 char matrix [3][4];

    之前声明你的数组

    离开if作用域后,变量不存在了

    【讨论】:

      【解决方案3】:

      让你的代码工作的解决方案是这样的,你可以使用 switch case 来区分你想在屏幕上打印什么。 array 只存储要在 switch 中使用的索引。

      您的错误在于您在if 语句的范围内声明了array,因此,一旦执行if 内的块,array 将不再存在。

      另外,关于如何在char array 中存储数据的问题,您需要提前指定边(在运行时在 C99 中也可以,但让我们跳过它),或者动态分配它(即这里不需要)。

      所以,char var 可以存储单个字节,但您试图存储字符串 {" "},所以您会出错。

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      
      int sumOfDie(int inputArray[], int arraySize);
      int drawDie(int inputArray[], int arraySize)
      {
          int i, row, column=0;
      
          char matrix[5][5];
          for (i=0; i<arraySize; i++)  //determine the graphic number from the random number
          {
              if (inputArray[i]==1)
              {
                  matrix [3][4] = 0; //{{"   "},{" * "},{"   "}};
              }
              if (inputArray[i]==2)
              {
                  matrix [3][4] = 1; //{{"*  "},{"   "},{"  *"}};
              }
              if (inputArray[i]==3)
              {
                  matrix [3][4] = 2; //{{"*  "},{" * "},{"  *"}};
              }
              if (inputArray[i]==4)
              {
                  matrix [3][4] = 3; //{{"* *"},{"   "},{"* *"}};
              }
              if (inputArray[i]==5)
              {
                  matrix [3][4] = 4; //{{"* *"},{" * "},{"* *"}};
              }
      
              for (row=0; row<3; row++) //Print out the matrix
              {
                  for(column=0; column<4; column++)
                  {
                      switch (matrix[row][column]) {
                          case 0:
                              // change the print accordingly
                              printf("    *     \n");
                              break;
                          case 1:
                              // change the print accordingly
                              printf("    *     \n");
                              break;
                          case 2:
                              // change the print accordingly
                              printf("    *     \n");
                              break;
                          case 3:
                              // change the print accordingly
                              printf("    *     \n");
                              break;
                          case 4:
                              // change the print accordingly
                              printf("    *     \n");
                              break;
                      }
                  }
                  printf("\n");
              }
          }
      
      }
      
      int sumOfDie(int inputArray[], int arraySize)
      {
          int i, sum=0;
          for (i=0; i<arraySize; i++)
          {
              sum=sum+inputArray[i];
          }
          return sum;
      }
      
      
      
      int main(void)
      {
          int i, sum;
          int inputArray[5];
          srand(time(NULL));
      
      
          for(i=0; i<5; i++)
          {
              inputArray[i] = rand()%5+1;
          }
      
          for (i=0; i<5; i++)
          {
              printf("Number:%d\n", inputArray[i]);
          }
      
          drawDie(inputArray, 5);
      
          sum = sumOfDie(inputArray,5);
          printf("The sum of %i + %i + %i + %i + %i = %i", inputArray[0], inputArray[1], inputArray[2], inputArray[3], inputArray[4], sum);
      }
      

      【讨论】:

      • 这很可怕,也很麻烦。
      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      相关资源
      最近更新 更多