C++ getline 和 cin 读取

标签 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;
   }

我想读入“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/

相关文章:

由 小码哥发布于 2008 年 1 月

c++ - C++ 中的 constexpr 是什么?

c++ - OpenCV mat::at 抛出异常

c++矩阵使用迭代器插入值(作业)

c++ - 仅使用标准库设置文件创建时间

在包含该类列表的结构之后定义的 C++ 类

c++ - 在 WSL 上使用 boost 时 undefined reference (Windows 上的 Bash)

c++ - 如何定义派生类的非成员构造函数(在类头中)

c++ - 推送和弹出的不同互斥量

c++ - 比较模板变量的值