确认二进制文件中仅存在 1 和 0

To confirm only 1 and 0 exist in the Binary

本文关键字:存在 二进制文件 确认      更新时间:2023-10-16

我想只用 1 和 0 作为二进制文件。但相反,答案一直给我第二个选项,无论我输入什么数字。我试过在哪里编程错误,但不幸的是我仍然找不到它。所以我希望我能在这里得到一些帮助。

#include<iostream>
#include<cmath>
using namespace std;
int DualzahlZuDezimal(long long n)
{
int dez = 0;
int i = 0, rem;
while (n != 0)
{
rem = n % 10;
n /= 10;
dez += rem * pow(2, i);
++i;
}
return dez;
}
string a;
int main()
{
long long n;
int dez;
cout << "Test Ein- und Ausgabe : n";
cout << "----------------------- n";
cout << "Eingabe einer Dualzahl : ";
cin >> n;
if ((n == '1') && (n == '0'))
{
cout << "Dual : " << n << endl;
cout << "Dezimal : " << DualzahlZuDezimal(n) << endl;
cout << "cin ok ? : ja-ok" << endl;
return 0;
}
else
{
cout << "Dual : 0" << endl;
cout << "Dezimal : 0" << endl;
cout << "cin ok ? : nein-nicht ok" << endl;
return 0;
}
}

如果我理解正确,您希望用户输入一个二进制数,例如10001101001,您将显示十进制等效项(在本例中为1129(。

有两种常规方法可以自己执行此操作:

  1. 您可以像这样做一样将值读取为数字,然后应用转换 进程,但您检查rem是否0(在这种情况下,您这样做 无(,或1(在这种情况下,您添加 2 的幂(。如果是另一个值, 报告错误,并返回 0。
  2. 您可以改为将该值读取为std::string。然后你可以使用std::find_first_not_of()要检查01以外的内容:

    if (n.find_first_not_of("01") != string::npos) { /* complain */ }

    但是您需要根据字符进行转换。

但最好的方法不是重新发明轮子,而是让标准库通过stol()为您处理它:

#include <cstddef>
#include <iostream>
#include <string>
using namespace std;
int
main()
{
string text;
cout << "Enter a binary number: " << flush;
cin >> text;
size_t endpos = 0;
long decimal_number = stol(text, &endpos, 2); // base 2 == binary
if (endpos != text.size()) {
cerr << "'" << text << "' is not a valid binary number!" << endl;
return 1;
}
else {
cerr << "binary  number: " << text << endl;
cerr << "decimal number: " << decimal_number << endl;
return 0;
}
}

请记住,来自控制台的输入是文本。如果您需要检查文本是否与特定格式匹配(在本例中,完全由 1 和 0 组成(,最简单的方法是查看该文本:

std::string input;
std::cin >> input;
bool input_is_valid = true;
for (int i = 0; input_is_valid && i < input.length(); ++i) {
if (input[i] != '0' && input[i] != '1')
input_is_valid = false;
}

然后,如果输入有效,则将文本转换为数值:

long long n = std::stoll(input);