下面是代码。它包含一个以 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/