c++ - 程序在读取所有结构成员之前终止

标签 c++ string struct

下面是代码。它包含一个以 int rno 和字符串 name 作为成员的结构 student。我使用一个循环来读取所有学生变量的成员。但是只要我输入任何字母,程序就会终止。此外,不显示输入的字符串。

#include <iostream>
#include <string>

using namespace std;
int main() {
    struct student {
        int rno;
        string name;
    };

    student s[4];

    int i;
    for( i = 0; i < 4; ++i) {
        cin >> s[i].rno;
        getline( cin, s[i].name );
    }

    string line = "";
    for( i = 0; i < 80; ++i) line += '-';

    cout << line << "ROLL\tNAME\n" << line << '\n';

    for( i = 0; i < 4; ++i) {
        cout << s[i].rno << '\t' << s[i].name << '\n';
    }
}

谢谢。

最佳答案

您的问题是使用 >>> 流运算符,然后使用 getline 而不刷新流中任何不需要的换行符。

然后,当您读取下一个结构时,您将获得希望成为前一个元素名称的字符串,并且您的流可能无法读取整数(除非名称以数字开头)。

因此您的读入循环应该使用 cin.ignore(MAX_INT,'\n') 或代替 MAX_INT 一些比您预期的任何行都长的值。

cin.ignore 将忽略接下来的 X 个字符或直到它到达指定字符(在本例中为 MAX_INT 字符或直到它到达换行符 '\n').

您读入的 for 循环将如下所示:

for (i = 0; i < 4; ++i){
    cin >> s[i].rno;
    cin.ignore(MAX_INT, '\n');
    getline(cin, s[i].name);
}

关于c++ - 程序在读取所有结构成员之前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674916/

相关文章:

string - python3 sum in stings 每个字母值

java - 如何找到 String.indexOf ("\")?

c - 指向函数的指针如何在 C 中发挥作用?

c++ - sizeof 运算符是否会导致模板参数推导发生?

c++ - Boost:触发并忘记异步函数调用?

string - Z3 字符串 : finding the API

c# - 调用无参数构造函数后具有引用类型成员的 c# 结构的相等性和 gethashcode 覆盖

c++ - 如何使用删除删除成语从结构 vector 中删除值?

python - 如何使用 Python 读取未签名的短裤?

c++ - 如何将整数 push_back 为字符串?