朋友。下一个控制台程序允许用户输入二进制数,并输出十进制等值。它在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;
};
答案 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。 那么你的程序就可以了。