我的第23行代码存在问题。(请参阅下面的代码)
当我使用 “cin>> studentNum” ;我没有问题,程序读取名字的一个字符串,但是如果我想使用 “getline(cin,studentNum)” 收集更多数据来读取更多字符串就像全名一样,程序只是跳过命令并要求得分。
为什么?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int studentNum, testNum, i, j;
double sum, testScore, average;
string studentName;
i = 0;
// asking user for input
cout << "Please enter the number of students in this classroom: " << endl;
cin >> studentNum;
cout << "Now enter the number of tests each student has taken in this class: " << endl;
cin >> testNum;
while (i < studentNum)
{
cout << endl << "Now please enter the firstname of the student: " << endl;
cin >> studentName; //**My Problem is in this line ###########**
j = 0;
sum = 0;
while (j < testNum)
{
cout << "Please enter the score of each test, then hit enter: " << endl;
cin >> testScore;
sum += testScore;
j++;
}
i++;
}
}
答案 0 :(得分:2)
听起来你需要使用cin.ignore
。您需要丢弃流中仍然存在的换行符。
#include <limits>
// This is not a C++11 feature, works fine in C++98/03
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::getline(std::cin, studentName);
默认情况下,operator>>
会跳过前导空格,即按std::ctype
分类。您可以通过使用unsetf(std::ios_base::skipws)
关闭此行为来在测试程序中看到它将提取空白。通过使用cin.ignore
,您可以简单地丢弃它,因为它是不受欢迎的。有关详细信息,请参阅cin and getline skipping input。
答案 1 :(得分:1)
你应该清除状态标志并刷新steram
cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
getline(cin, studentName);