将二进制转换为十进制,我如何要求用户仅输入二进制



我试图要求用户只输入二进制数,比如说(11110(,即十进制(30( 但输出总是这样 输入二进制数:11110 - 只允许二进制数 - 答案是:30 我也被要求不要使用任何库或函数。

#include<iostream>
using namespace std;
int main()
{
long int binary, decimal = 0, j, base = 1;
cout << " enter a binary number : ";
cin >> binary;
char r[40] = { " " }; int s[40];
for (int i = 0; i < 40; i++)
{
if (r[i] != '0') {
if (r[i] != '1') {
if (r[i] != '') {
cout << "Only binary numbers are allowedn";
break;
}
}
}
}
for (int i = 0; i < 40; i++)
{
if (r[i] == '0')
s[i] = 0;
if (r[i] == '1')
s[i] = 1;

}
while (binary != 0)
{
j = binary % 10;
decimal += j * base;
base *= 2;
binary /= 10;
}
cout <<" the answerr is : "<< decimal << endl;
return 0;
}

您已经创建了一个大小为 40 的输入数组,并将第一个字符设置为空格。但是,您永远不会将用户的输入读入该数组!它卡在变量binary.结果,r[0](检查的第一件事(将始终相等,这将导致您的char r[40] = {};循环失败。

请考虑以下 2 个更改:

  • 初始化数组时,用空终止符填充它,如下所示:binary
  • r转换为字符串或字符数组,并将其读入CC_7以检查无效输入。

如果要完全避免字符串,只需使用取模运算符来验证除了 0 或 1 之外没有数字。

long int temp = binary;
while(temp > 0) {
if(temp % 10 > 1) {
std::cout << "Input can only be binary!" << std::endl;
//do something
}
temp = temp / 10; //integer math will cut the lsb
}

另一种解决方案是将输入保留为字符串,对其进行验证,然后将其转换为数字,如下所示:

#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) 
{
bool     result  = false;
long int decimal = 0;
while (!result)
{
string binary;
cout << " enter a binary number : ";
cin >> binary;
bool success = true;
for (int i = 0; i < binary.length(); ++i)
if (binary[i] != '0' && binary[i] != '1')
{
cout << "Only binary numbers are allowedn";
success = false;
break;
}
if (!success)
continue;
long int binNb, j, base = 1;
binNb = atoi(binary.c_str());
while (binNb)
{
j        = binNb % 10;
decimal += j * base;
base    *= 2;
binNb   /= 10;
}
result = true;
}
cout <<" the answer is : "<< decimal << endl;
return 0;
}

但确实,尽管它显示了比 Nick Reed 答案更清晰的代码,但此解决方案的效率可能稍低,因为它需要 2 个循环而不是 1 个循环。

这是你喜欢的。

最新更新