如何在for循环

时间:2017-08-23 19:01:28

标签: c++

我正在处理研讨会上的注册计划。

我设法完成了结构课程,并且还能够列出研讨会。 目前,我在注册时遇到问题。 问题是这样的: 用户将输入他想要注册的研讨会。 一旦用户注册了研讨会,将导致研讨会成功注册(如果有插槽),或者未成功(如果所有插槽都被录取)。

我拥有的代码能够打印出结果,但是它会显示它循环的所有结果。有没有办法让我只为用户输入的特定研讨会打印结果?

以下是我的代码。 我明白我做了一个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;
       }
    }
}

1 个答案:

答案 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";
}