2017-11-30 9 views
1

私は、ユーザが整数の他に何かを入力すると、プログラムが終了するように条件を作ろうとしています。私がAという文字を言うと、プログラムは繰り返し0を出力します。私はその出口()が問題だと思っていますが、私がそれを代用すると同じ問題があります。助言?cin.fail()でプログラムを終了させる方法

#include <iostream> 
#include <cctype> 
#include <cstdlib> 


using namespace std; 
void even(int); 
void odd(int); 
int main() 
{ 
    int i; 
    do{ 
     cout << "Enter an integer" << endl; 
     cin >> i; 
     if(i % 2 == 0) 
      even(i); 
     else if (i % 2 == 1) 
      odd(i); 
     else if (cin.fail()) 
      exit (0); 
    }while(!isdigit(i)); 

    return (0); 
} 
void even(int i) 
{ 
    cout << i << endl; 
} 
void odd (int i) 
{ 
    //nothing here 
} 
+0

'他(cin.fail())'の場合 - > ''(CIN!)の場合 –

答えて

2

cin >> iが失敗した場合は、変数iが割り当てられていません。あなたのプログラムでは、これはまだ不確定な値を持っていることを意味します。 (i % 2 == 0)のような不定値を使用することは、未定義の動作です。つまり、C++標準に関する限り、何かが起こる可能性があります。

しかし、最も一般的なシステムでは、変数iは、レジスタやメモリの一部が最後に使用されたときに残っていた値を持ちます。この値は偶数または奇数のいずれかになります。したがって、iがゼロまたは正の値になった場合、あなたのfailに決して届くことはありません。

ifのチェックの順序を変更してcinを最初にチェックし、抽出が成功した場合はiを使用することをお勧めします。

0

私はあなたのプログラムに少し微調整があなたのために問題を解決しなければならないとします

if (cin.fail()) 
      exit (0); 
     else if(i % 2 == 0) 
      even(i); 
     else if (i % 2 == 1) 
      odd(i); 
関連する問題