我正在尝试编写一个程序,该程序从用户那里获取数组输入并将奇数元素分配给第一个索引,直到没有更多的奇数元素,并且偶数元素被分配到数组的末尾,直到它们完成所以例如
假设这是一个大小为 10 的数组,用户为第一个元素输入 1,为第二个元素输入 2,为第三个元素输入 3,因此最终数组将具有索引 0 和 1 以具有值 1 和 3 以及索引 10 的值是 2 等等,这是我的代码
int main() {
int array1[31];
int array2[31];
for(int i=0;i<31;i++) {
if(scanf("%d",&array1[i])%2==0) {
array2[31-i]=array1[i];
}
else {
array2[i]=array1[i]
}
}
for (int i=0;i<31;i++) {
printf ("%d\t",array2[i]);
}
return 0;
}
但是这段代码只打印出用户以完全相同的顺序输入的内容,就像我的 if 条件没有执行一样,我不知道为什么,我仍然是 C 的初学者,所以如果出现这个问题,我深表歉意太微不足道了,但是是的,感谢您的帮助
答案 0 :(得分:3)
首先,了解scanf()
does not return the matched value, it returns the number of items matched。你应该
scanf()
返回值(在本例中为 1
)
也就是说,在代码中,当您从 i
的 0
值开始循环时,您不能使用
array2[31-i]=array1[i];
因为,对于 i
值为 0,它会像
array2[31]=array1[i];
这是off-by-one,你需要使用
array2[31-i-1]=array1[i];
这样你的数组索引是 [0,31).