大家好,我正在对结构化数据进行编程工作,我相信我理解结构是如何工作的。
我正在尝试阅读学生姓名,身份证号码(A-Numbers)及其余额列表。
当我编译我的代码时,它会在第一次读取所有内容,但第二次绕循环,每次之后,它会提示输入用户名但跳过getline并直接转到A-Number和A - 数字输入。
任何帮助将不胜感激。只是试图找出每次循环时如何使getline工作。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main(){
const int maxStudents = 30;
struct Students{
string studentName;
int aNumber;
double outstandingBalance;};
Students students[maxStudents];
for(int count = 0; count < maxStudents-1; count++)
{
cout<<"Student Name:";
cin.ignore();
getline(cin,students[count].studentName);
cout<<"\nA-Number:";
cin>>students[count].aNumber;
if(students[count].aNumber == -999)
break;
cout<<"\nOutstanding Balance:";
cin>>students[count].outstandingBalance;
}
cout<<setw(20)<<"A-Number"<<"Name"<<"Balance";
for(int count2 = 29; count2 >= maxStudents-1; count2--)
cout<<setw(20)<<students[count2].aNumber<<students[count2].studentName<<students[count2].outstandingBalance;
system("pause");
return 0;
}
答案 0 :(得分:3)
答案 1 :(得分:3)
你正在做的事情不起作用的原因是'&gt;&gt;'经营者
第一次不提取尾随'\n'
,下一个getline
看到它,并立即返回一个空行。
简单的答案是:不要混用getline
和>>
。如果输入是
面向行,使用getline
。如果需要解析行中的数据
使用>>
,使用getline
读取的字符串初始化a
std::istringstream
,并在其上使用>>
。
答案 2 :(得分:1)
放
cin.ignore();
在循环结束时。
答案 3 :(得分:0)
问题在于混合cin
和getline
。格式化输入(使用&gt;&gt;运算符)和无格式输入(getline是一个示例)不能很好地一起使用。你一定要仔细阅读它。 Click here for more explanation。
以下是您的问题的解决方案。
cin.ignore(1024, '\n');
是关键。
for(int count = 0; count < maxStudents-1; count++)
{
...
cout<<"\nOutstanding Balance:";
cin>>students[count].outstandingBalance;
cin.ignore(1024, '\n');
}