【问题标题】:How to display less elements than there is in an array如何显示比数组中更少的元素
【发布时间】:2017-07-29 14:27:17
【问题描述】:

我正在编写一个程序来从数组中分离偶数和奇数整数。我给了偶数和奇数数组 3 个元素,但是当没有 3 个偶数/奇数整数时,它会打印出一些随机数。有什么方法可以定义要打印的内容。如果需要,这里是代码:

附:我找到了问题的解决方案,但它有不同的方法,所以我只想知道我可以这样做,如果没有,为什么?谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <time.h>

int main()
{
     int nubmers[3];
     int even[3];
     int odd[3];

     for(int i = 0; i < 3; i++)
     {
         printf("Enter %d element : ", i);
         scanf(" %d", &numbers[i]);

         if(numbers[0]%2 == 0)
         {
             even[0] = numbers[0];
         }
         else
         {
             odd[0] = numbers[0];
         }

         if(nubmers[1]%2 == 0)
         {
             even[1] = numbers[1];
         }
         else
         {
             odd[1] = numbers[1];
         }

         if(numbers[2]%2 == 0)
         {
             even[2] = numbers[2];
         }
         else
         {
             odd[2] = numbers[2];
         }
     }

     printf("Even : %d\n", even[i]);
     printf("Odd : %d\n", odd[i]);

     return 0;
}

【问题讨论】:

  • 这就是你现在使用循环的方式。提示:您正在填写 evenodd 三次而不是一次。
  • 是的,我已经在代码中纠正了这一点,但没有问题,谢谢
  • @CinCout 对不起,我不太明白你的评论我需要做什么我需要做一个 if 声明与偶数和 else 与奇数或

标签: c arrays


【解决方案1】:

在循环内部,您应该使用循环计数器变量i,而不是固定索引012

你还应该计算偶数和奇数的个数。

最后你可以打印一个偶数值列表和一个奇数值列表。

int main()
{
     int nubmers[3];
     int even[3];
     int odd[3];
     int noEven = 0, noOdd = 0;

     for(int i = 0; i < 3; i++)
     {
         printf("Enter %d element : ", i);
         scanf(" %d", &numbers[i]);

         if (numbers[i]%2 == 0)
             even[noEven++] = numbers[i];
         else
             odd[noOdd++] = numbers[i];
     }

    for(int i = 0; i < noEven; i++)
        printf("Even : %d\n", even[i]);
    for(int i = 0; i < noOdd; i++)
        printf("Odd : %d\n", odd[i]);

     return 0;
}  

【讨论】:

  • 不错。为什么不通过将偶数/奇数计数器和相关数组包装成一个 struct 来让它变得更好呢? ;)
【解决方案2】:

如何显示比数组中更少的元素

定义任何“未使用”值并以此初始化数组。

“未使用”值应该是您明确知道在程序运行期间不需要/使用的任何值。

在您的情况下,例如,您可以采用最小的int,它被定义为INT_MIN

#include <stdio.h> 
#include <limits.h> /* for INT_MIN */

#define NOT_IN_USE INT_MIN


int main(void)
{
  ...

  for (size_t i = 0; i < 3;: ++i)
  {
    numbers[i] = NOT_IN_USE;
    even[i] = NOT_IN_USE;
    odd[i] = NOT_IN_USE;
  }

确保绝对没有使用“未使用”值:

  /* core program code here */
 for(int i = 0; i < 3; i++)
 {
   printf("Enter %d element : ", i);
   scanf(" %d", &numbers[i]);
   if (NOT_IN_USE == numbers[i]) 
   {
     printf("Invalid input. Try again.\n");
     --i;
     continue;
   }

如果您以后只想检查那些已经使用/触摸过的元素,只需遍历数组,跳过所有等于“未使用”值的元素。

  /* Show results */
  for (size_t i = 0; i < 3;: ++i)
  {
    if (NOT_IN_USE != numbers[i])
    {
      printf("number[%zu] = %d\n", i, number[i]);
    }

    if (NOT_IN_USE != even[i])
    {
      printf("even[%zu] = %d\n", i, even[i]);
    }

    if (NOT_IN_USE != odd[i])
    {
      printf("odd[%zu] = %d\n", i, odd[i]);
    }
  }
}

【讨论】:

  • 出于好奇,您为什么将&lt;&gt; 用于!=
  • 哇... - 最近帕斯卡做得太多了... - 已修复:}
  • @Jean-FrançoisFabre:老实说,这不是 Pascal,而是 VBA ... ;}
  • 我认为 Pascal 使用 /=。像所有 BASIC 风格(和 python 2)一样的 VBA 使用 &lt;&gt; 这太 80 年代了 :)
  • @Jean-FrançoisFabre:Pascal,实际上是德尔福is &lt;&gt; as well。 “sooo 80s”哈哈“retrocoding”? ;-)
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2018-09-27
相关资源
最近更新 更多