我需要输入20个数字并仅输出双重位置

时间:2017-12-08 14:41:54

标签: c arrays for-loop

尝试用数组输入20个数字并输出 仅在双重位置的数字,但不知何故,它打印 也是0位置......请帮忙。

#include<stdio.h>
#define n 20
int main()
{
int num[n]={0},i=0,order=1,double_locaion=0;

for(i=0;i<n;i++)
{
printf("please enter %d number\n",order);
scanf("%d",&num[i]);
order++;
}

for(i=0;i<n;i++)
{
    if (i%2==0 && i!=1 && i!=0)
    {
        printf("%d\n",num[i]);
    }
}
}

3 个答案:

答案 0 :(得分:1)

试试这个,从2开始,每次增加2,你不必处理第0个元素和奇数元素。

for (i = 2; i < n; i += 2)
{
    printf("%d\n",num[i]);
}

答案 1 :(得分:1)

首先,您的代码无法打印数组的0-th位置。鉴于if陈述的条件,不可能

其次n - 您不需要为该名称使用宏扩展。

/* This program takes 20 integer number from input.
 * Prints the numbers entered in odd positions.(First,Third,..etc).
 */
#include<stdio.h>
#include<stdlib.h>
#define NUM 20
int main(void)
{
    int numArr[NUM];
    for(size_t i = 0; i < NUM; i++) {
        printf("please enter %zu number\n",i+1);
        if( scanf("%d",&numArr[i]) != 1){
            fprintf(stderr, "%s\n","Error in input" );
            exit(1);
        }
    }

    for(size_t i = 0; i < n; i++)
    {
        if( i%2 == 0 )// if you want to omit the first number put the 
                      // the condition (i%2 == 0 && i)
        {
            printf("%d\n",numArr[i]);
        }
    }
    return 0;
}

你的代码跳过第0个元素你做错了什么?

if (i%2==0 && i!=1 && i!=0)
                      ^^^^

i0使此条件失效时 - 您永远无法打印它。

i!=1

如果i=1然后i%2将是1,那么您甚至不会检查第二个条件,整个条件表达式将变为false。所以你可以安全地省略这个逻辑。

有更好的方法吗?

当然,

for(size_t i = 0; i < n; i += 2){
    printf("%d\n",num[i]);
}

解释

如果您认为每次检查2的模数运算时,0剩余的元素都会

 0,2,4,6,8,10,...18

看模式?从0开始,每次增加2,何时停止?在到达20编码之前,我们会收到

for(size_t i = 0; i < n; i += 2){ 
/*   Initialize with i=0 as first number is 0 (i=0)
 *   Increments by 2 (i+=2) 
 *   Runs when less than 20 (i<n) 
 */
    printf("%d\n",num[i]);
}

如果要省略第0个索引,请正确初始化

for(size_t i = 2; i < n; i += 2){ 

答案 2 :(得分:0)

如果你的意思是你想要数组中出现在偶数位置的数字,你可以这样做:

for (i = 2; i < n; i=i + 2) //Initialize i = 0 if 0 is consider as even
{
    printf("%d\n",arr[i]);
}

我将上面的代码i初始化为2,每次迭代的增量为2,因此只能在偶数位置(2,4,6 ...)访问元素。