#include <iostream>
using namespace std;
int main()
{
int N;
int T;
cin>>N;
struct key {
std::string namek;
int szam;
int szat;
std::string kol;
};
key kert[N];
for (int i=0; i<N; i++) {
int k=i;
cin.ignore(100, ' ');
getline(cin, kert[k].namek);
cin>>kert[k].szam;
cin.ignore(100,' ');
cin>>kert[k].szat;
cin.ignore(100, ' ');
getline(cin, kert[i].kol);
}
for (int i=0; i<N; i++) {
int k=i;
cout<<kert[i].namek;
}
我想读入“kert”结构,但我的程序只读入 kert[0],然后返回。我不知道我在哪里搞砸了,因为我对字符串使用了 getline,对整数使用了 cin。我知道 cin 将 '\n' 留在缓冲区中并尝试在 cin 之后读取虚拟字符,我也尝试了 cin.ignore (如代码中所示)但没有任何帮助。我哪里搞砸了?
最佳答案
我做了一些游戏,改变了 ignores 允许我输出 kert 中的所有名字。现在 ignores 寻找结束符并且只被调用以抵消 cin。
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
struct key {
std::string namek;
int szam;
int szat;
std::string kol;
};
key kert[N];
cin.ignore(100, '\n');
for (int i=0; i<N; i++) {
getline(cin, kert[i].namek);
cin>>kert[i].szam;
cin>>kert[i].szat;
cin.ignore(100, '\n');
getline(cin, kert[i].kol);
}
for (int i=0; i<N; i++) {
cout<<endl<<kert[i].namek<<endl;
}
return 0;
}
关于C++ getline 和 cin 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466651/