尝试用数组输入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]);
}
}
}
答案 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;
}
if (i%2==0 && i!=1 && i!=0)
^^^^
i
当0
使此条件失效时 - 您永远无法打印它。
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 ...)访问元素。