2012-03-30 3 views
0

私はC++をコーディングしているので、しばらくお待ちしており、文字列入力を収集すると厄介な事を忘れてしまいました。基本的に、これがループバックして、負の数を使用すると、2回目の回で従業員名の行からcinをスキップします。前にこの問題を抱えていて、文字列が入力される前または後にその種のものをクリアまたは処理しなければならないことを覚えています。助けてください!getline(cin、string)のC++クイック・イシュー

PSまた、特別な助けを借りれば誰でも以下の正しいループで私を助けることができます。どのように私は値を入力することを確認する文字列の入力値を確認することができますか?

#include <string> 
#include <iostream> 
#include "employee.h" 

using namespace std; 

int main(){ 

    string name; 
    int number; 
    int hiredate; 

    do{ 

     cout << "Please enter employee name: "; 
     getline(cin, name); 
     cout << "Please enter employee number: "; 
     cin >> number; 
     cout << "Please enter hire date: "; 
     cin >> hiredate; 

    }while(number <= 0 && hiredate <= 0 && name != ""); 

    cout << name << "\n"; 
    cout << number << "\n"; 
    cout << hiredate << "\n"; 

    system("pause"); 
    return 0; 
} 
+0

名前が '' "'のときだけループを止めたいですか?私はあなたが 'name ==" "'をしたいと思う?私はあなたがまた、( '||')ではなく( '&&')を使用したいと思う。 – GWW

答えて

1

を使用して...一つの方法です。論理ANDは、の3つがの場合にのみトリガーされます。

do { 
    ... 
} while(number <= 0 || hiredate <= 0 || name == ""); 

@viditが定める次は、改行文字で読んで問題を取り除くためにcin.ignore()を使用しています。

最後に、もう1つは、整数の代わりに...整数のためのアルファベット文字を入力した場合重要なのは、あなたのプログラムが無限ループを実行します。これを軽減するには、<cctype>ライブラリのisdigit(ch)を使用してください。

cout << "Please enter employee number: "; 
cin >> number; 
if(!isdigit(number)) { 
    break; // Or handle this issue another way. This gets out of the loop entirely. 
} 
cin.ignore(); 
+0

ありがとうございます!これは私にとってはうまくいくはずです! – chadpeppers

1

cinそれを消費する次のCINの原因となるストリーム内の改行文字(\n)を、葉。それを回避する方法はたくさんあります。これは、あなたが以下のいずれかが設定されていないかどうかであるためにあなたのループ条件を変更したいignore()

cout << "Please enter employee name: "; 
getline(cin, name); 
cout << "Please enter employee number: "; 
cin >> number; 
cin.ignore();   //Ignores a newline character 
cout << "Please enter hire date: "; 
cin >> hiredate; 
cin.ignore()   //Ignores a newline character 
+0

良いですが、数字の整数の代わりに文字を入力したり、名前に何も入力しないとループしません。 – Makoto