【问题标题】:Counting Values in a 2D array - C计算二维数组中的值 - C
【发布时间】:2017-10-24 16:24:02
【问题描述】:

所以我一直在努力完成一项学习 C 的作业,只是希望能对我出错的地方进行某种纠正

场景是一个调查,这是我期望产生的输出

     POPULARITY TABLE
     ----------------------------------------------------
     City Cricket Footy Tennis Soccer
     -----------------------------------------------------
     Melbourne 4 1 1 4
     Sydney 4 5 1 0
     Brisbane 2 2 4 4
     Adelaide 1 0 2 0
    ----------------------------------------------------- 

表格的变量为 M、S、B、A 和 1、2、3、4

每次我执行我的代码时,它要么不计算值,要么说有 36 个值

   #include  <stdio.h>
   int main()
    {
        int  i,  j;
        char M, B, S, A;
        int m_cricket = 0, m_footy = 0, m_tennis = 0, m_soccer = 0;
        int s_cricket = 0, s_footy = 0, s_tennis = 0, s_soccer = 0
        int b_cricket = 0, b_footy = 0, b_tennis = 0, b_soccer = 0
        int a_cricket = 0, a_footy = 0, a_tennis = 0, a_soccer = 0
        int survey[36][2] = {{M, 1}, {S, 2}, {B, 1}, {B, 3}, {M, 2}, {B, 4}, {S, 1}, {A, 3}, {M, 4}, {B, 2}, {B, 1}, {S, 3}, {B, 4}, {B, 4}, {M, 1}, {M, 1}, {B, 3}, {B, 3}, {S, 1}, {S, 1}, {S, 2}, {M, 4}, {M, 4}, {S, 2}, {A, 1}, {S, 2}, {B, 3}, {M, 1}, {B, 1}, {S, 2}, {A, 3}, {M, 4}, {S, 1}, {B, 2}, {M, 3}, {B, 4}};

for (int i = 0; i < 36; i++)
{
        for (int j = 0; j == 2; j++)
        {
            if (survey[i][j] == M, 1)
            {
                m_cricket++;
            }
        }

}

    printf("\tCity  Cricket Footy  Tennis  Soccer\n");
    printf("------------------------------------------------\n");
    printf("Melbourne:\t %d\t %d\t %d\t %d\t\n", m_cricket, m_footy, m_tennis, m_soccer);
    printf("Sydney:\t %d\t %d\t %d\t %d\t\n", s_cricket, s_footy, s_tennis, s_soccer);
    printf("Brisbane:\t %d\t %d\t %d\t %d\t\n", b_cricket, b_footy, b_tennis, b_soccer);
    printf("Adelaide:\t %d\t %d\t %d\t %d\t\n", a_cricket, a_footy, a_tennis, a_soccer);

    return 0;
}   

我哪里做错了?有没有更好的方法可以编写代码?

我只为墨尔本编码,因为在编码时,我的逻辑是,如果我能让一个城市运转起来,其余的都会很简单

【问题讨论】:

  • int i, j; 是多余的,因为您在循环中再次声明它们,并且它们仅在循环中使用。
  • 在进行 C 编程时,不能只是通过反复试验“猜测语法”。那永远不会成功。相反,你必须真正知道你在做什么,在你写的每一行代码中。这段代码没有任何意义——你需要在你的初级编程书中学习字符串和字符。

标签: c xcode windows macos sublimetext3


【解决方案1】:

这个循环...

for (int j = 0; j == 2; j++)

...什么都不做。它仅在 j2 时运行。由于它被初始化为0,但从来没有这样,所以其中的代码永远不会被执行。

如果您希望它遍历内部数组的值(01),您想像这样检查 j 是否小于 2,就像您已经完成了外循环。

for (int j = 0; j < 2; j++)

尽管您似乎试图在这些循环中同时检查 if 中的两个值,但也许您想要做的是用不同的 if 语句替换该循环?

if ((survey[i][0] == M) && (survey[i][1]== 1))

此外,如果您打算使用 MBSA 变量将字符放入您的数组中,您只需要像 'M' 一样将单引号放在周围没有被赋值,所以可能会有任何值。同样也适用于if 语句。

所以总结一下你的代码应该是这样的:

#include  <stdio.h>
int main()
   {
   int m_cricket = 0, m_footy = 0, m_tennis = 0, m_soccer = 0;
   int s_cricket = 0, s_footy = 0, s_tennis = 0, s_soccer = 0
   int b_cricket = 0, b_footy = 0, b_tennis = 0, b_soccer = 0
   int a_cricket = 0, a_footy = 0, a_tennis = 0, a_soccer = 0
   int survey[36][2] = {{'M', 1}, {'S', 2}, {'B', 1}, {'B', 3}, {'M', 2}, {'B', 4}, {'S', 1}, {'A', 3}, {'M', 4}, {'B', 2}, {'B', 1}, {'S', 3}, {'B', 4}, {'B', 4}, {'M', 1}, {'M', 1}, {'B', 3}, {'B', 3}, {'S', 1}, {'S', 1}, {'S', 2}, {'M', 4}, {'M', 4}, {'S', 2}, {'A', 1}, {'S', 2}, {'B', 3}, {'M', 1}, {'B', 1}, {'S', 2}, {''A'', 3}, {'M', 4}, {'S', 1}, {'B', 2}, {'M', 3}, {'B', 4}};

   for (int i = 0; i < 36; i++)
      {
      if ((survey[i][0] == 'M') && (survey[i][1]==1))
         {
         m_cricket++;
         }
      }

    printf("\tCity  Cricket Footy  Tennis  Soccer\n");
    printf("------------------------------------------------\n");
    printf("Melbourne:\t %d\t %d\t %d\t %d\t\n", m_cricket, m_footy, m_tennis, m_soccer);
    printf("Sydney:\t %d\t %d\t %d\t %d\t\n", s_cricket, s_footy, s_tennis, s_soccer);
    printf("Brisbane:\t %d\t %d\t %d\t %d\t\n", b_cricket, b_footy, b_tennis, b_soccer);
    printf("Adelaide:\t %d\t %d\t %d\t %d\t\n", a_cricket, a_footy, a_tennis, a_soccer);

    return 0;
}

【讨论】:

    【解决方案2】:

    有两点很突出:

    • 您使用未初始化的字符变量(MBSA)就像他们的意思一样;这很令人困惑。
    • 这一行:if (survey[i][j] == M, 1) 完全没有意义。它始终采用if,因为逗号运算符使条件等同于单个1

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多