执行跳过getline()

时间:2017-11-17 01:15:16

标签: c++

首先用ctrl + d结束后,程序会跳过“cin>> contBuscado” 并前往。 我不知道为什么会这样,我用过.ignore和.clear但没有任何反应。

 #include <iostream>
 #include<vector>
 using namespace std;

struct Contacto{
string nombre;
int numero;
}contacto;

int main() {

vector<Contacto> listaContactos;

while(cout<<"Nombre:" && getline(cin,contacto.nombre)){
    cout<<"Telefono:";
    cin>>contacto.numero;
    cin.ignore();
    listaContactos.push_back(contacto);
}
cin.clear();

cout << "\nIntroduce el nombre del contacto a buscar: ";
string contBuscado="";
cin >> contBuscado;
cin.ignore();

for(Contacto const& con:listaContactos){
    if(con.nombre==contBuscado){
        cout<<"El telefono de "<<contBuscado<<" es "<<con.numero<<"\n";
        return 0;
    }
}
cout<<"\nEl contacto introducido no se encuentra en la lista\n";

return 0;

}

1 个答案:

答案 0 :(得分:1)

使用 Ctrl D 结束输入后,您已结束程序的标准输入。此时,您无法再提供任何输入。

您需要为用户添加退出this.setState((prevState) => ({ counter: prevState.counter + 1 }));循环的方法,例如输入一个空行。

此外,您会发现在所有情况下使用std::getline()而不是while更容易。