for循环没有运行,试图向后遍历数组元素

时间:2011-12-03 14:13:23

标签: c++ arrays pointers for-loop

练习使用指针和数组我正在尝试做一个能够将二进制输入转换为denary的简单程序..我想我对逻辑有一个好主意但我甚至没有试图实现它因为我努力让我的 for 循环运行!

看起来很傻但我知道for循环中的代码在它之外工作正常,所以它必须是条件错误的一些......?我试图从char数组的后面开始(使用指针导航)并将每个char(作为int)输出到第一个元素。

所以期望的输出是“0 - 1 - 0 - 1 - ”

#include <iostream>

using std::cout;
using std::endl;

//prototypes
void binaryToDenary(const char* input, int& inputLength);

int main(){

    const char binaryInput[] = {1,0,1,0};
    int inputLength = sizeof(binaryInput)/sizeof(binaryInput[0]);

    binaryToDenary(binaryInput, inputLength);

    return 0;
}
void binaryToDenary(const char* input, int& inputLength){
    //testing some stuff--- this all works as expected
    //cout << input[2] << " " << (int)*(input+2) << " " << inputLength <<endl;

    int i;
    for(i = inputLength; i < 0; i--){
        cout << (int)*(input+i) << " - ";
    }

}

6 个答案:

答案 0 :(得分:3)

您的for循环应为:

for(i = inputLength -1 ; i  >= 0; i--)
{
    cout << (int)*(input+i) << " - ";
}

您的代码中存在两个问题:

  • i = inputLength应为i = inputLength -1
  • i < 0应为i >= 0

另外,将第二个参数类型从int &更改为int

void binaryToDenary(const char* input, int inputLength) //now its better!

类型int&减少了用例,并使几乎没有任何好处。如果您使用int &,那么所有这些都会导致编译错误:

const int inputLength = sizeof(binaryInput)/sizeof(binaryInput[0]);
^^^^ note this

binaryToDenary(binaryInput, inputLength); //compilation error
binaryToDenary(binaryInput, sizeof(binaryInput)/sizeof(binaryInput[0])); //error
binaryToDenary(binaryInput, 4); ////compilation error

所以使用int,以上所有内容都可以正常编译!

答案 1 :(得分:2)

数组索引从零开始,因此最后一个元素位于inputLength - 1。使用i < 0,您将立即从循环中退出,因为它永远不会成立......

for(i = inputLength - 1; i >= 0; i--){
    cout << (int)*(input+i) << " - ";
}

答案 2 :(得分:1)

for(i = inputLength; i < 0; i--)

只有在inputLength小于0时才会运行,这是不可能的?

你需要:

for(i = (inputLength-1); i >= 0; i--)
         ^^^^^^^^^^^^^^    ^^

答案 3 :(得分:1)

C数组基于0,因此有效索引由

给出
(0 <= i) && (i < array_length)

在您的程序中,这意味着初始化中最后一位数的位置应为inputLength - 1,循环条件应为i >= 0

(至于为什么你的循环没有运行,一开始你有i == inputLength,所以我是肯定的,立即失败i < 0条件。

答案 4 :(得分:0)

只要i更大(或可能相等)为零,您就希望运行。只要i小于零,您就试图运行循环,并且以大于零的值开头会导致您永远不会进入循环。

for(i = inputLength; i > 0; i--){
        cout << (int)*(input+i) << " - ";
}

答案 5 :(得分:0)

您必须检查迭代循环变量i是否为正..

但是你应该在二进制输入向量上使用STL迭代器而不是以c方式循环它的内容,如果你想练习C ++,可能的解决方案可能是:

vector<char> binaryInput;

binaryInput.push_back(1);
binaryInput.push_back(0);
binaryInput.push_back(1);
binaryInput.push_back(0);

vector<char>::iterator it;

for ( it=myvector.begin() ; it < myvector.end(); it++ ){
    cout << " " << *it << endl; //or whatever you need to do with vector content
}