【问题标题】:My code doesn't returns an output. It returns only exit code我的代码不返回输出。它只返回退出代码
【发布时间】:2019-04-16 20:11:19
【问题描述】:

我想用另一半反转一半的数组输入。

    #include <stdio.h>
    #include <math.h>
    void main() {
       double size = 5;
       int array[5] = {1, 2, 3, 4, 5};
       int half_size = ceil(size / 2);
       for(int i = 0; i < half_size; i++){
           int a;
           int rev = size - (i + 1);
           array[i] = a;
           array[i] = array[rev];
           array[rev] =  a;`enter code here`
           }
       printf("%d", array[5]);
       }

【问题讨论】:

  • array[5] 超出范围。另外我建议在这里考虑一种避免浮点数的方法。
  • 你不能像这样打印整个数组:你必须循环打印每个元素。
  • 如果要进行精确算术,请使用 int。 Double 用于比 int 可以容纳的范围更大的不精确算术。
  • array[i] = a; 行的目的是什么,然后立即对 array[i] 进行另一个(不同的)赋值?
  • void main() 是错误的。 What should main() return in C and C++?main() always returns int?。并且输出没有返回,它被打印出来了

标签: c


【解决方案1】:

我同意@Eugene Sh. 和@FredK 的建议。 array[5] 行中的行 printf("%d", array[5]); 超出范围,因为 array 仅具有从 0 到 4 的索引。由于我假设您要打印出数组中的最后一个元素,因此您应该将其更改为 printf("%d", array[4]); .另一件事是您的赋值表达式array[i] = a; 是错误的。我假设表达式是从索引i 中的元素与索引rev 中的元素交换过程的一部分。如果是这种情况,那么您应该将其更改为 a = array[i];。我根据我的建议更新您的代码,它会输出正确的结果。我添加了 for 循环来验证 array 值是否被反转以用于测试目的。测试完成后可以删除。

#include <math.h>
int main() {
    double size = 5;
    int array[5] = {1, 2, 3, 4, 5};
    int half_size = ceil(size / 2);
    for(int i = 0; i < half_size; i++){
        int a;
        int rev = size - (i + 1);
        a = array[i];
        array[i] = array[rev];
        array[rev] =  a;
    }
    for (int i = 0; i < size; ++i) {
        printf("%d ", array[i]);
    }
    printf("\n");
    printf("%d", array[4]);
}

【讨论】: