如果语句甚至似乎不存在

时间:2021-01-21 13:40:42

标签: arrays c if-statement

我正在尝试编写一个程序,该程序从用户那里获取数组输入并将奇数元素分配给第一个索引,直到没有更多的奇数元素,并且偶数元素被分配到数组的末尾,直到它们完成所以例如

假设这是一个大小为 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 的初学者,所以如果出现这个问题,我深表歉意太微不足道了,但是是的,感谢您的帮助

1 个答案:

答案 0 :(得分:3)

首先,了解scanf() does not return the matched value, it returns the number of items matched。你应该

  • 根据预期匹配的数量检查 scanf() 返回值(在本例中为 1
    • 如果扫描成功,请使用提供的参数检查扫描值。
    • 如果扫描失败,请清理输入缓冲区并再次请求输入。

也就是说,在代码中,当您从 i0 值开始循环时,您不能使用

array2[31-i]=array1[i];

因为,对于 i 值为 0,它会像

array2[31]=array1[i];

这是off-by-one,你需要使用

array2[31-i-1]=array1[i];

这样你的数组索引是 [0,31).

相关问题