【问题标题】:invert the input array反转输入数组
【发布时间】:2014-11-07 11:40:05
【问题描述】:

我用 C++ 编写了一个小代码,它接受输入一个数组,这将被反转。 第一个变成最后一个,第二个变成倒数第二个,依此类推…… 这里是代码:

#include <iostream>

using namespace std;

const int length=3;

void exch(int arr_exch[]){
int s,e,tmp;
s=0;
e=length-1;
while ((e-s!=1)||(e-s!=0)){
tmp=arr_exch[s];
arr_exch[e]=arr_exch[s];
arr_exch[s]=tmp;
s=s+1;
e=e-1;
}
}

int main()
{
int arr[length],counter;

  cout << "enter "<< length <<" integers:\n";
  for (counter=0; counter<length; counter++){
  cin >> arr[counter];
  }
  exch (arr[]);   **<--- here the error "expected primary expression before ']' token.**
  for (counter=0; counter<length; counter++){
  cout << arr[counter]<<"\t";
  }
    return 0;
}

错误是 - 目前 - 分段错误和“在 ']' 标记之前的预期主表达式。我不知道如何更正它。有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 如果您的代码甚至无法编译,您是如何设法获得分段错误(这是一个运行时)错误?为什么不使用空格和缩进来格式化代码?为什么不使用调试器?
  • 做一个天使,正确地格式化你的代码。如果你这样做会更容易阅读。
  • @TheParamagneticCroissant:也许编译器在尝试编译此代码时执行了分段错误(我很确定我会这样做)。
  • @barakmanos 哈哈,很公平:D
  • @alf - 好吧,它可能是真正的代码。问题是人们倾向于编译,然后运行剩下的任何 a.out :-(

标签: c++


【解决方案1】:

这对我来说有点困惑,你的代码甚至没有编译,你得到了分段错误。怎么会?

总之改变这个

exch (arr[]);

exch (arr);

在访问无效内存或不允许访问的内存时,您通常会遇到分段错误,这只会在您执行代码时发生,这意味着在成功编译代码之后。

【讨论】:

    【解决方案2】:

    从你的问题我可以理解的是你想要反转一个数组。

    在代码中的 while 循环中,您尝试访问索引为 -1 的 arr_exch 数组,这会导致分段错误。

    您可以尝试下面的代码,它工作正常。

    #include <iostream>
    
    const int length = 3;
    // exch1() is another way for reversing a array.
    void exch1(int arr_exch[]) {
        for (int i = 0; i < length/2; i++) {
            int temp = arr_exch[i];
    
            arr_exch[i] = arr_exch[length - i - 1];
            arr_exch[length - i - 1] = temp;
        }
    }
    void exch(int arr_exch[]){
        int tmp = 0;
        int s = 0;
        int e = length - 1;
    
        while (e > s){  
            tmp = arr_exch[s];
            arr_exch[s] = arr_exch[e];
            arr_exch[e] = tmp;
            s = s + 1;
            e = e - 1;
        }
    }
    
    int main()
    {
        int arr[length];
    
        std::cout << "enter "<< length <<" integers:\n";
        for (int counter = 0; counter < length; counter++){
            std::cin >> arr[counter];
        }
        exch(arr);   //**<--- here the error "expected primary expression before ']' token.**
        for (int counter = 0; counter < length; counter++){
            std::cout << arr[counter] << "\t";
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2011-11-10
      • 2012-02-02
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多