Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确认二进制文件中仅存在1和0_C++ - Fatal编程技术网

C++ 确认二进制文件中仅存在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) {

我只想对二进制文件使用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;
    }
}
#包括
#包括
使用名称空间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
    flush
    std::cout
    autom在语法上。类似地,那些
    endl
    s可以是简单的
    '\n'
    ——当程序终止时,输出流会被刷新。是的。但是它们通常也是无害的,最好养成这种习惯,这样在以后编写代码时,当涉及到的流不是cin/cout/cerr时,事情仍然可以工作。不,这是一个坏习惯,p这是因为当您不使用控制台时,这些刷新会破坏性能。文件I/O会在内部进行缓冲,并针对特定的文件系统进行调整。这样的刷新会使所有内容都慢下来。
    long long n = std::stoll(input);