簡體   English   中英

C++ - Cin.fail 開始時出現空格

[英]C++ - Cin.fail when space on begining

當 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') - 它不起作用..我的意思是,程序在任何情況下都會失敗。 ..

很抱歉問這個“愚蠢”的問題,但我做了幾個小時,仍然沒有弄清楚..謝謝大家。

cin >> b; 將跳過前導空格,然后閱讀下一個單詞。 這就是它的設計方式。

如果要讀取整行輸入,請改用getline

如果你讀入一個std::string而不是固定大小的char b[80];它也會更容易,更安全char b[80]; . 如果你碰巧讀到超過 80 個字符,那你就干杯了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM