C ++ getline和cin阅读

时间:2016-05-26 16:41:27

标签: c++

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

我想读一下&#39; kert&#39; struct但我的程序只读入kert [0]然后返回。我不知道我搞砸了哪里,因为我使用了getline for strings和cin for int。我知道cin离开了&#39; \ n&#39;在缓冲区和cin之后尝试阅读虚拟字符,我也尝试了cin.ignore(如代码中所示),但没有任何帮助。我在哪里陷入困境?

1 个答案:

答案 0 :(得分:1)

我做了一些游戏并改变了忽略允许我输出kert中的所有名字。现在忽略查找结束字符并且仅被调用以抵消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;
}