为什么这个for循环使程序停止工作? (C ++)

时间:2017-09-28 04:53:13

标签: c++ for-loop

朋友。下一个控制台程序允许用户输入二进制数,并输出十进制等值。它在Windows中使用Codeblocks编译,没有错误或警告。 但是,在运行程序时,输入一个二进制数,按回车键然后弹出一个窗口,说“程序由于问题而停止正常工作”,程序关闭。 如果我取消for循环(负责将二进制数转换为十进制数)然后编译并运行程序,则不会出现问题。

为什么这个for循环会产生这个问题?

#include <iostream>
#include <cstring>
using namespace std;

int conversor(char a);

int main() {
    char bina[10];
    unsigned int len, n = 1, value = 0;

    cout << "\nEnter a binary integer: ";
    cin >> bina;
    len = strlen(bina);

        for(len--;len>=0;len--) {
        value = value + conversor(bina[len])*n;
        n = n * 2;
        };

    cout << value;
}

int conversor(char a) {
    if(a=='1') return 1;
    else if(a=='0') return 0;
};

2 个答案:

答案 0 :(得分:2)

你的变量名为&#34; len&#34;是&#34; unsigned int&#34;,所以它永远不会小于零,循环永远不会终止。

改为使用普通的int。

答案 1 :(得分:0)

您正在使用unsigned int,如果您有:

unsigned int len = 0;
len--;

cout << len << endl;

len仍然是值。

您的程序将停止,因为len变量超出范围。 这是我在运行程序后得到的东西,我在每次迭代时打印len变量。因此,有一个非常大的len值,因为它超出了bina数组的范围。

Enter a binary integer: 11001
len = 4
len = 3
len = 2
len = 1
len = 0
len = 4294967295
Segmentation fault

将其更改为signed int。 那么你的程序就可以了。