C ++ - Cin.fail开始时的空格

时间:2015-11-04 17:09:09

标签: c++

当cin.fail以空格开头时,我需要帮助。

这就是我的意思。

#include <iostream>
#include <math.h>

using namespace std;

int main ()
{
    char b[80];
    int e,d,v,m=0;

    for(int i=0;i<80;i++)
    {
        b[i]=0;
    }

    cout << "Insert number in binary:" << endl;
    cin >> b;

    v=0;
    for(int i=0;i<80;i++)
    {
        if(b[i]=='1' || b[i]=='0' || b[i]=='\n')
        {
        v++;
        }
        else if(b[i]!=0 || b[i]!='\0' || b[i]==' ')
        {
            cout << "Error" << endl;
            return 0;
        }
    }

    e=v-1;
    d=0;
    m=0;
    for(int i=0;i<v;i++)
    {
      m=(b[i]-48)*(pow(2,e));
      d=d+m;
      e=e-1;
    }

    cout << "His number in decimal: "<< d << endl;

    return 0;
}

当有类似1010的东西时,它会给我编号。 如果它包含其他数字 - 2,3等..它将失败,它可以 但当它得到像_101010这样的东西时,程序仍然会继续,它会给我数字,但我需要它失败。所以我需要类似......当b包含1 0或\ n时,程序将继续,否则它将失败。但是当我放入\ n喜欢

if(b[i]=='1' || b[i]=='0' || b[i]=='\n') - 它不起作用..我的意思是,程序在任何情况下都失败了......

很抱歉询问这个“愚蠢”的问题,但我已经做了好几个小时但仍然没有想出来......谢谢你们。

1 个答案:

答案 0 :(得分:0)

cin >> b;将跳过前导空格,然后阅读下一个单词。这是它的设计方式。

如果您想阅读整行输入,请改用getline

如果您阅读的是std::string而不是固定尺寸char b[80];,那么它也会更容易,也更安全。如果你碰巧读了超过80个字符,你就会干杯。