2012-03-30 127 views
0

由于我编码了C++,并且我忘记了在收集字符串输入时发生的恼人的事情,所以它已经有一段时间了。基本上,如果这个循环通过,比方说如果你使用负数,那么它会跳过员工姓名行中的第二个循环。我记得之前有过这个问题,并且在输入字符串之前或之后必须清除或执行此类操作。请帮忙!关于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 ==“”'?我想你也想用or('||')而不是和('&&') – GWW 2012-03-30 03:44:54

回答

1

你想改变你的循环条件是与否下面没有设置任何。如果所有三个未设置,逻辑AND将仅触发。

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

接下来,使用cin.ignore()通过@vidit规定获得与阅读在换行符摆脱问题。

最后,重要的是,如果您输入整数的字母字符而不是整数,您的程序将运行无限循环。要缓解这种情况,请使用<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 2012-03-30 14:34:06

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 2012-03-30 03:49:33