getline上的C ++快速问题(cin,string)

时间:2012-03-30 03:40:45

标签: c++ string

我已经有一段时间了,因为我已经编码了c ++而且我已经忘记了当你收集字符串输入时发生的烦人的事情。基本上,如果这个循环回来,比如你使用负数,那么它会从第二轮的员工姓名行中跳过cin。我记得在输入字符串之前或之后必须清除或执行某些操作之前遇到此问题。请帮忙!

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;
}

2 个答案:

答案 0 :(得分:1)

cin在流中留下换行符(\n),这会导致下一个cin使用它。有很多方法可以解决这个问题。这是一种方式..使用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 

答案 1 :(得分:1)

您希望将循环条件更改为是否未设置以下任何一项。只有在未设置所有 3 时才会触发逻辑AND。

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

接下来,使用@vidit规定的cin.ignore()来解决换行符中的问题。

最后,重要的是,如果输入整数的字母字符而不是整数,则程序将运行无限循环。要缓解这种情况,请使用isdigit(ch)库中的<cctype>

 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();