首页 文章

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

提问于
浏览
-1

朋友 . 下一个控制台程序允许用户输入二进制数,并输出十进制等值 . 它在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 回答

  • 2

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

    unsigned int len = 0;
    len--;
    
    cout << len << endl;
    

    len仍将是 positive 值 .

    您的程序将停止,因为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 . 那么你的程序就可以了 .

  • 0

    你的名为“len”的变量是“unsigned int”类型,所以它永远不会小于零,循环永远不会终止 .

    请改用普通的int .

相关问题