For循环不起作用

C++ - For loop not working

本文关键字:不起作用 循环 For      更新时间:2023-10-16

我正在制作的资本主义模拟器的for循环(用于调试)不起作用,因为它在ix=0处退出(它只执行循环体一次)。我也相信它在语法上是正确的(从其他问题)。

下面是我的代码(我省略了变量):
void print_things(String2Double b, String2Double up_cost, String2Double tFinish, string* bNames) {
    // Just for debugging!
    for (int ix=0;ix<(sizeof(bNames)/sizeof(bNames[0]));ix++) {
        cout << "Count of business " << bNames[ix] << ": " << b[bNames[ix]] << endl;
        cout << "Upgrade cost for " << bNames[ix] << ": " << up_cost[bNames[ix]] << endl;
        cout << "Time to finish for " << bNames[ix] << ": " << tFinish[bNames[ix]] << endl;
        cout << ix << endl;
    }
}

我也让它打印bNames[]的大小,它是9,它只打印ix=0,我怀疑一定是出了什么问题。

谢谢!

这里的bNames是指针,而不是数组。

表达式

(sizeof(bNames)/sizeof(bNames[0]))

不能正常工作

这部分可能是你在不理解的情况下复制的,因为它只对数组有效,对指针无效。在函数中将参数声明为bNames[]也行不通。

使用指针时,需要显式传递元素个数。

c++中更好的方法是使用std::vector(但强烈建议您首先了解它是如何工作的)。

<标题>编辑

如果您在编译时知道(不是数组)的大小,则只能在c++中传递数组引用,使用as语法:

void print_i10(int (&a)[10]) {
    // `a` here is a reference to an array of 10 integers
}

也可以将数组传递给函数模板,让模板在编译时推断数组的大小;例如:

template<typename T, int N>
void print(const char *format, const T (&a)[N]) {
    printf("[");
    for (int i=0; i<N; i++) {
        if (i) printf(", ");
        printf(format, a[i]);
    }
    printf("]n");
}
int main(int argc, const char *argv[]) {
    int ia[10] = {1,2,3,4,5,6,7,8,9,10};
    const char *sa[] = {"this", "that", "hmmm..."};
    print("%i", ia);
    print("'%s'", sa);
    return 0;
}

,但这意味着对于每个元素类型和元素大小,您将在程序中获得print函数的不同副本(通常是坏主意)。