我必须在c ++中使用flag吗?

时间:2018-06-22 00:32:36

标签: c++

这是我面临的问题。用户要输入一个数字,如果该数字在数组中,则我希望将此数字打印为有效数字,否则,我要将其打印为无效数字。

但是此代码不起作用;它仅打印Not Valid

我看了其他类似的代码。他们使用了bool标志。

为什么在此程序中需要使用标志,何时需要使用标志?

#include<iostream>

using namespace std;

int main()
{
    const int SIZE=6;

    int arry[SIZE]={5658845,4520125,1230493,4856970,2078594,2393741};

    int number;
    cout <<"Enter the number"<<endl;

    for(int i=0; i<SIZE; i++)
    {
        cin>>number;

        if(arry[i]==number)
           cout<<"This is valid number"<<endl;
         else
           cout << "This is not valid number"<<endl;
    }
    return 0;

}

3 个答案:

答案 0 :(得分:3)

实现代码的方式是在搜索数组的同时读取用户的输入。您已经实现了一个猜谜游戏:“第一个数字是X吗?” “第二个数字正好是X吗?”依此类推,对于数组中的每个数字。

这就是您想要的吗?否则,如果您只希望用户输入1个数字,然后检查该数字是否存在于数组中的任何位置,则需要在输入搜索循环之前读取用户的输入(此时bool进入播放),例如:

#include <iostream>

using namespace std;

int main()
{
    const int SIZE = 6;
    const int arry[SIZE] = {5658845, 4520125, 1230493, 4856970, 2078594, 2393741};

    int number;
    cout << "Enter the number" << endl;
    cin >> number;

    bool found = false;
    for(int i = 0; i < SIZE; ++i)
    {
        if (arry[i] == number)
        {
            found = true;
            break;
        }
    }

    if (found)
        cout << "This is valid number" << endl;
    else
        cout << "This is not valid number" << endl;

    return 0;
}

或者,使用std::find()算法而不是手动搜索:

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    const int SIZE = 6;
    const int arry[SIZE] = {5658845, 4520125, 1230493, 4856970, 2078594, 2393741};

    int number;
    cout << "Enter the number" << endl;
    cin >> number;

    const int *end = arry + SIZE;
    if (find(arry, end, number) != end)
        cout << "This is valid number" << endl;
    else
        cout << "This is not valid number" << endl;

    return 0;
}

答案 1 :(得分:2)

只要想查看实例或条件发生,就可以使用标志。您可以按照以下步骤编写程序。实际上,flag只是一个变量,您可以在其中保存条件以便进一步检查。

const int SIZE=6;

int arry[SIZE]={5658845,4520125,1230493,4856970,2078594,2393741};

int number;
cout <<"Enter the number"<<endl;
cin >> number;
int flag = 0;
for(int i=0; i<SIZE; i++{
    if(arry[i]==number){
        flag=1;
        break;
    }
}
if(flag==1)
    cout<<"This is valid number"<<endl;
else
    cout << "This is not valid number"<<endl;

在这里,我们必须检查循环是否为真的条件。因此,我们使用flag以便可以在循环外获得结果。

在这种情况下,您也可以执行以下操作:

int flag=0;
for(int i=0; i<SIZE; i++{
    if(arry[i]==number){
        cout<<"This is valid number"<<endl;"
        flag=1;
        break;
    }
}
if(flag!=1)
    cout << "This is not valid number"<<endl;

答案 2 :(得分:1)

我的代码不起作用

如果要检查数组中的值,请检查数组中的所有元素。 但是你没有。

我必须在c ++中使用flag吗?

标志是一种状态。因此,在许多代码中,定义标志并将其用作选项。

像这样

const int SINGLE_THREAD = 0;
const int MULTI_THREAD = 1;
/...

bool select_server_type(int option)
{
    //....
}

select_server_type(SINGLE_THREAD);

但是,您不必在所有情况下都使用标志。

在这种情况下,您可以像这样检查它们。

(我知道这是非常不安全的代码。但是在您的水平上,该代码将是可以理解的代码)

#include<iostream>

using namespace std;

//check all element in array
bool match(int* arr, int size, int value)
{
    for(int i = 0; i < size; ++i)
    {
        if(arr[i] == value)
            return true;
    }

    return false;
}

int main()
{
    const int SIZE=6;

    int arry[SIZE]={5658845,4520125,1230493,4856970,2078594,2393741};

    int number;
    cout <<"Enter the number"<<endl;

    cin>>number;

    if(match(arry, SIZE, number))
        cout<<"This is valid number"<<endl;
    else
        cout << "This is not valid number"<<endl;
}