2016-06-19 15 views
-2

問題EOLを検出しない方法:CIN無効な文字対

は、整数の追加を計算し、出力を印刷するプログラムを書きます。

出力続いて、加算に相当する単一の整数から成る:

入力形式:

行1:

出力は、スペースで区切られた整数新しい行。

入力1:

出力1:

番号

サンプル入力と出力の ライン1つの加算入力2:

3 5 AB 7

出力:

無効な入力


だから、私は多くのアプローチを試してみたが、何も

これを動いていないようにみえは前に私の最後の試みでした私はあきらめた。

#include <iostream> 

using namespace std; 
int main(){ 

    int i; 
    int sum=0; 

    cin>>i; 
     while(isdigit(i)){ 

     sum+=i; 
     cin>>i; 
     } 
     if(!isdigit(i)) cout<<"Invalid Input"; 
     else cout<<sum; 


    return 0; 

助けた皆に感謝ビッグ...

私は、コードに若干の変更がの作品トリック

最終的な解決をした ...私は間違った方法をisdigit使用していたことに気づきました。

#include <iostream> 

using namespace std; 
int main(){ 

    char i; 
    int sum=0; 


     while(cin>>i){ 

     if(!isdigit(i)) { 
       cout<<"Invalid Input"; 
       return 0; 
     } 
     sum+=(i-'0'); 

     } 
     cout<<sum; 


    return 0; 
} 

は*私は聞かせて文字 として、すべての入力を取った....私は私が最終的に何をしたかを説明しましょう(CIN >> I)の入力はEOLまで読まれていることを確認してください。

私が入力した数字が数字でないかどうかをチェックするための条件を追加しました(もし起これば、 "Invalid Input"を印刷してループから抜け出す)。そうでなければ、( '0'-i)を実行してcharに相当するint値を得て、それを加算してループの最後までループを繰り返し、合計を出力します。

2桁の数字

#include <iostream> 

using namespace std; 
int main(){ 

    string i; 
    int sum=0; 


     while(cin>>i){ 
     try{ 

      sum+= stoi(i); 

     } 
     catch(...){ 

      cout<<"Undefined"; 
      return 0; 
     } 

     } 
     cout<<sum; 


    return 0; 
} 
+0

['isdigit(i)'](http://en.cppreference.com/w/c/string/byte/isdigit)あなたが思っていることをしないでください。 –

+0

@πάνταῥεῖ - ありがとう、cpprefをチェック –

+0

十分な参考にならないのですか? 'cin >> i;'を使用しているときはすでに数字があります。 –

答えて