这是循环数组的正确方法吗?

时间:2016-09-03 11:15:50

标签: c++ arrays

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;



int main(){
    string Whitelist[4] = {"Stian", "Mathias", "Modaser"};
    for (int x = 0; x < 3; x++){
        cout << x + 1<< ". " << Whitelist[x] << endl;
        if (Whitelist[x] == "Stian" && "Mathias" && "Modaser"){
            cout << "" << Whitelist[x] << " is here" <<  endl;
        }
        else{ cout << "no one is here" << endl; }
    }
    cin.get();
    return 0;
}

//所以是的,我只是试图循环我的数组,看看是否有任何这些名称。所以我想你几乎可以阅读代码所做的事情,因为大多数你都是专业人士:P。但是当我问我的朋友,他已经编写了1 - 2年的时间,他说我无法循环通过这样的数组并告诉我使用矢量。那是什么意思?我的代码有效吗?

2 个答案:

答案 0 :(得分:0)

这组代码错误

if (Whitelist[x] == "Stian" && "Mathias" && "Modaser"){
    cout << "" << Whitelist[x] << " is here" <<  endl;
}

为什么呢?因为假设if语句的第一个条件评估为true,如下所示:

if (true && "Mathias" && "Modaser")
{
    //...
}

然后代码没有意义。在if语句中,您必须单独检查每个条件,如下所示:

if (Whitelist[x] == "Stian" && Whitelist[x] =="Mathias" && Whitelist[x] =="Modaser"){
    cout << "" << Whitelist[x] << " is here" <<  endl;
}

但是由于任何1个字符串不能同时是三个名字,这个条件会失败,(你使用&&)。使用||运算符修复代码,对于最终代码(同样,删除<< "",这只是多余的,不必要的):

if (Whitelist[x] == "Stian" || Whitelist[x] =="Mathias" || Whitelist[x] =="Modaser"){
    cout << Whitelist[x] << " is here" <<  endl;
}

顺便说一句:作为建议,使用std::vector<std::string>而不是原始数组,这样您就可以获得比数组更容易和更多的功能。 最后,您的阵列中还有4个元素,其中一个未使用。这可能是拼写错误,因此请将数组大小设为3

答案 1 :(得分:0)

像这样循环数组没有根本的错误。

我们只能猜出你朋友的意思,但我可以自己检查你的代码。

但是,你有四个数组元素,只有三个元素循环,这可能是一个错误;如果是的话,证明你最好不要使用迭代器,而不是硬编码你可能会出错的数字。

此外,您的if条件错误:您的意思是||(&#34;或&#34;),而不是&&(&#34;和&#34; )?你必须完整地写出相邻的条件,所以:

if (Whitelist[x] == "Stian" || Whitelist[x] =="Mathias" || Whitelist[x] =="Modaser")

我不确定为什么你要比较所有这些值,当它们是阵列中唯一的值时。好吧,除了那个空的第四个元素;也许你正试图抓住那个。我们不知道,因为你没有告诉我们。您是否要在迭代某些其他数组时搜索Whitelist?我们无从得知。也许这就是你的朋友真正的含义?再一次,我无法说出来。

""流式传输到std::cout只需等待资源,而其他任何事情都没有。删除它。

最后,有些切线,it would be better not to block waiting for input as a means to keep your console window open。那不是你的计划的工作。