2017-10-27 21 views
1

次のコードは、完全に1と0の2つのcstringsを入力すると無限ループを生成します。2つの非常に基本的なC-ストリングを入力するときの無限ループ

私は何をしましたか?

char input1[9] = {'\0'}; 
    char input2[9] = {'\0'}; 
    bool reEnter = false; 


    do 
    { 
     reEnter = false; 
     cout << "The numbers to be added are: "<< endl; 
     cin.ignore(); 
     cin.getline(input1, 9, '\0'); 
     cin.ignore(); 
     cin.getline(input2, 9, '\0'); 
     for (int i = 0; i<8; i++) 
     { 
      if((input1[i] != '0') && (input1[i] != '1') || (input2[i] != '0') && (input2[i] != '1')) 
       { 
       reEnter = true; 
       } 
     } 
     if(reEnter == true) 
      cout << "Must be an 8 bit binary" << endl; 
    }while(reEnter == true); 
+0

your'eは、文字を扱うよう、0''「'1''と」「再入力が」は常に真であるように、'あなたが使用する必要があります –

+0

をチェックし、ようです。 –

+1

。これはCではないdowhile – Neo

答えて

1

これがそれです。なんらかの理由で無視されたくなく、cin.getline関数をnull文字で終了すると、無限ループが作成されていました。

char input1[9] = {'\0'}; 
char input2[9] = {'\0'}; 
bool reEnter = false; 


do 
{ 
    reEnter = false; 
    cout << "The numbers to be added are: "<< endl; 
    cin.getline(input1, 9); 
    cin.getline(input2, 9); 
    for (int i = 0; i<8; i++) 
    { 
     if((input1[i] != '0') && (input1[i] != '1') || (input2[i] != '0') && (input2[i] != '1')) 
      { 
      reEnter = true; 
      } 
    } 
    if(reEnter == true) 
     cout << "Must be an 8 bit binary" << endl; 
}while(reEnter == true); 
+0

そうです、私はそれを得る、ターミナルからの入力は '\ 0'で終わっていません。 1つの質問はなぜ9文字の入力を取るのですか? 'cin.getline(input2、9);' – qwn

+0

は、終端に1文字を残して、デフォルトでヌル終端文字にします。私はこれが別の問題であることを覚えているようです –

関連する問題