C++ 确认二进制文件中仅存在1和0
我只想对二进制文件使用1和0。但是,答案总是给我第二个选项,无论我输入什么号码。我试过在哪里编错了程序,但不幸的是我还是找不到。所以我希望我能在这里得到一些帮助C++ 确认二进制文件中仅存在1和0,c++,C++,我只想对二进制文件使用1和0。但是,答案总是给我第二个选项,无论我输入什么号码。我试过在哪里编错了程序,但不幸的是我还是找不到。所以我希望我能在这里得到一些帮助 #include<iostream> #include<cmath> using namespace std; int DualzahlZuDezimal(long long n) { int dez = 0; int i = 0, rem; while (n != 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;
}
}
#包括
#包括
使用名称空间std;
int DualzahlZuDezimal(长北)
{
int dez=0;
int i=0,rem;
而(n!=0)
{
rem=n%10;
n/=10;
dez+=rem*pow(2,i);
++一,;
}
返回dez;
}
字符串a;
int main()
{
长n;
景德兹;
cout请记住,控制台的输入是文本。如果需要检查文本是否匹配特定格式(在本例中,完全由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;
}
如果我理解正确,您希望用户输入一个二进制数,如10001101001
,然后显示十进制等价物(1129
)
通常有两种方法可以自己做到这一点:
您可以像读取数字一样读取该值,然后应用转换
过程,除了检查rem
是否为0
(在这种情况下,您可以
无),或1
(在这种情况下,添加2的幂)。如果它是另一个值,
您报告错误,并返回0
您可以将该值读取为std::string
。然后可以使用
要检查0
或1
以外的内容,请执行以下操作:
if(n.find_first_not_of(“01”)!=string::npos){/*投诉*/}
但是,您需要根据字符进行转换
但最好的方法不是重新发明轮子,而是让标准库通过以下方式为您处理:
#包括
#包括
#包括
使用名称空间std;
int
main()
{
字符串文本;
cout文本;
大小\u t endpos=0;
长十进制数=stol(text,&endpos,2);//基2==二进制
if(endpos!=text.size()){
cerr如果((n='1')&&(n='0'))
这怎么可能是真的?事情一次只有一个值。@在量子计算方面,我相信标准涵盖了它'0'
的字符值是48(ASCII),而'1'
的字符值是49(ASCII).n
是一个long
,因此用户必须输入48
或49
…这似乎是一个尴尬的方法。@BigTemp您仍然只能观察一种状态;)@ArdentCoder巧妙的把戏!提示后不需要flush
;std::cin
flushstd::cout
autom在语法上。类似地,那些endl
s可以是简单的'\n'
——当程序终止时,输出流会被刷新。是的。但是它们通常也是无害的,最好养成这种习惯,这样在以后编写代码时,当涉及到的流不是cin/cout/cerr时,事情仍然可以工作。不,这是一个坏习惯,p这是因为当您不使用控制台时,这些刷新会破坏性能。文件I/O会在内部进行缓冲,并针对特定的文件系统进行调整。这样的刷新会使所有内容都慢下来。
long long n = std::stoll(input);