我正在尝试要求用户仅输入二进制数,假设(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] != '\0') {
cout << "Only binary numbers are allowed\n";
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;
}
答案 0 :(得分:0)
您已经创建了一个大小为40的输入数组,并将第一个字符设置为一个空格。但是,您永远不会将用户的输入读入该数组!它卡在变量bootstrap.min.css
中。结果,binary
(检查的第一件事)将始终等于r[0]
,这将导致您的循环失败。
请考虑以下两项更改:
for
char r[40] = {};
转换为字符串或char数组,然后将其读入binary
以检查无效输入。如果您想完全避免使用字符串,则可以简单地使用取模运算符来验证除0或1之外没有数字。
r
答案 1 :(得分:0)
另一种解决方案是将输入保留为字符串,对其进行验证,然后将其转换为数字,如下所示:
#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 allowed\n";
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个循环。
这是您想要的。