执行跳过 getline()

Execution skipping getline()

本文关键字:getline 执行      更新时间:2023-10-16

在用ctrl+d结束第一个后,程序跳过"cin>> contBuscado"并去 for。我不知道为什么会发生这种情况,我使用了 .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 listan";
return 0;

}

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

您需要为用户添加退出while循环的方法,例如输入空行。

此外,您会发现在所有情况下使用std::getline()cin >> 更容易。不建议将cin >>用于交互式输入,因为它的行为可能会令人困惑。