2015-11-04 25 views
-2

我需要cin.fail帮助,当它以空格开头时。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') - 它不工作。我的意思是,PROGRAMM在任何情况下,失败......

对不起,问这个“愚蠢”的问题,但我这样做是为了小时,仍然没有弄明白..谢谢你们。

+1

你的问题不清楚。你甚至没有在你发布的代码中的任何地方使用'cin',我们也不知道'b','i'和'v'是什么,或者它们与你所要求的有什么关系。 – interjay

+0

我了解你。我的意思是。我有关于cin小数的二进制数。就像010101和Cout一样,我将它转换成十进制数。例如,当你放入cin 1100时,cout将与12一起出现。当你放入cin 123时,cout将会失败并显示一些错误消息“Nespravny vstup”,因为2和3不是二进制数字。我需要程序失败,如果有人会在输入cin的开始处放置空间..就像.. _0101 ..在这种情况下,我需要程序失败。 –

+1

请发布[最小,完整和可验证示例](http ://stackoverflow.com/help/mcve)。 –

回答

0

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

如果要读取整行输入,请改为使用getline

如果您读入std::string而不是固定大小char b[80];,它也会容易得多并且更安全。如果你碰巧读了超过80个字符,你就会敬酒。