我正在处理研讨会上的注册计划。
我设法完成了结构课程,并且还能够列出研讨会。 目前,我在注册时遇到问题。 问题是这样的: 用户将输入他想要注册的研讨会。 一旦用户注册了研讨会,将导致研讨会成功注册(如果有插槽),或者未成功(如果所有插槽都被录取)。
我拥有的代码能够打印出结果,但是它会显示它循环的所有结果。有没有办法让我只为用户输入的特定研讨会打印结果?
以下是我的代码。 我明白我做了一个for循环。 但是我不太确定如何在不循环的情况下显示单个结果。
STRUCT:
struct Seminar
{
string Title;
int Capacity;
};
Seminar theSeminar[4];
功能:
void registerSem(string sem){
for (int i = 0; i < 4; i++)
{
if( theSeminar[i].Title == sem){
if (theSeminar[i].Capacity > 0)
{
theSeminar[i].Capacity = theSeminar[i].Capacity - 1;
cout << "Successful registered!" << endl;
}
else{
cout << "Unsuccessful registration" << endl;
}
}
else{
cout << "Not Found" << endl;
}
}
}
答案 0 :(得分:0)
您需要将打印移出循环。您可以通过添加found
变量来实现,之后可以检查:
void registerSem(string sem){
bool found = false;
for (int i = 0; i < 4; i++)
{
if( theSeminar[i].Title == sem){
found = true;
if (theSeminar[i].Capacity > 0)
{
theSeminar[i].Capacity = theSeminar[i].Capacity - 1;
cout << "Successful registered!" << endl;
}
else{
cout << "Unsuccessful registration" << endl;
}
break;
}
}
if (!found)
{
cout << "Not Found" << endl;
}
}
您还可以通过在找到研讨会后从整个函数返回来简化代码:
void registerSem(string sem) {
for (int i = 0; i < 4; i++) {
if (theSeminar[i].Title == sem) {
if (theSeminar[i].Capacity > 0) {
theSeminar[i].Capacity -= 1;
cout << "Successfully registered!\n";
}
else {
cout << "Unsuccessful registration\n";
}
return;
}
}
cout << "Not found\n";
}
或者,您可以将寻找合适研讨会的问题与对其进行分析的问题分开:
void registerSem(string sem) {
int found_at = -1;
for (int i = 0; i < 4; i++) {
if (theSeminar[i].Title == sem) {
found_at = i;
break;
}
}
if (found_at == -1) {
cout << "Not found\n";
return;
}
if (theSeminar[found_at].Capacity <= 0) {
cout << "Unsuccessful registration\n";
return;
}
theSeminar[found_at].Capacity -= 1;
cout << "Successfully registered!\n";
}