最初にctrl + dで終了した後、プログラムは "cin >> contBuscado"をスキップして をスキップし、forに進みます。 なぜこれが起こっているのか分かりません。私は.ignoreと.clearを使用しましたが、何も起こりません。getline()をスキップする実行
#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;
}
'std :: istream :: ignore()'が行うことを、デフォルトのパラメータとともに、そのドキュメントに従って注意深く読んでください。もっと良い方法は、 '' ''と '' ignore() 'を取り除き、' std :: getline'を排他的に使うことです。これは 'std :: getline()'の目的です:改行で終わる入力行を読み込みます。これは '' ''のためのものではありません。 '' ''、 '' ignore''、 '' clear''などの組み合わせを使って '' std :: getline() 'が自然に行うことを達成しようとすると、片頭痛のレシピです。単に 'std :: getline()'を使用してください。ずっと簡単です。少ない驚き。 –