我在 C++ 逻辑循环工作时遇到一些问题。根据测试,我认为这是 Grades()
函数循环中的错误。
基本上,该程序应该获取姓名和测试分数,它似乎是这样做的,但程序在那之后立即退出,我不确定为什么。只是想看看其他人是否注意到函数中可能导致程序提前终止的错误。
// Grades
void Grades(char names[][length], double grades[][4])
{
for(int i = 0; i < amount; i++)
{
cout << "Name: ";
cin.ignore();
cin.getline(names[i],length, '\n');
cout << "Test Scores: ";
for(int k = 0; k < 4; k++)
{
int num = 0;
while(!(cin >> num) ||
num < 0 ||
num > 100 )
{
cout << "invalid entry." << endl;
}
grades[i][k] = num;
}
}
}
最佳答案
每个 C++ 初学者都会遇到的问题……iostream
错误是“粘性”的,并且会一直存在,直到您在流上调用 clear
为止。
while(!(cin>> num) || num < 0 || num > 100 )
{
cout << "invalid entry." << endl;
cin.clear(); // reset the error so cin evaluates to true
cin.ignore( -1 ); // ignore the offending input
}
此外,getline
之前的 cin.ignore()
将忽略名字的第一个字母。
您应该使用 std::string
而不是 char
数组。
除此之外,只要输入格式正确,程序基本上就能正常工作。这是我的系统上的输出。请注意,Bob 的首字母被截断,并且 Bob 和 Jane 的名字后面有未初始化的字符,因为字符数组没有被视为 C 样式字符串。
Student: ob_???_
Average Score: 60.00 Grade Letter: D
Student: jane ???_?
Average Score: 70.00 Grade Letter: C
Student: mary
Average Score: 80.00 Grade Letter: B
Student: todd
Average Score: 90.00 Grade Letter: A
Student: alice
Average Score: 100.00 Grade Letter: A
但奇怪的是,ideone.com确实运行了该程序,但由于某种原因没有显示其输出。我不知道。
正如 Evan 提到的,如果您通过双击运行命令行程序,Windows shell 将默认退出。从预先存在的交互式 shell 运行以查看输出。 system( "pause");
是不可移植的并且非常糟糕的做法。
关于C++循环逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439645/