在单个循环中声明许多变量(C ++)

时间:2014-02-15 14:59:09

标签: c++ arrays variables

好吧,伙计们,我的问题是,我想声明24个变量。我可以使用这一行:

string p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ,p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23;

但是,这似乎不是正确的方法,所以我尝试使用循环来为我做。

for (int i = 0;i<=23;++i)
{
    char b = i;
    string p[b];
    p[b] = "-";
    cout << p[b];
}

不要忘记关于definind和打印变量的最后部分,这将会改变。但问题是,这段代码可以正常工作(编译时没有错误),但会立即崩溃(Program.exe停止工作......)。这是正确的方法吗?

编辑:

许多人似乎不理解:

对不起,我不清楚,p是没有数组。我想创建变量p0然后p1然后在循环中转发,但我不知道如何表达“p”之后的字符正在为每个循环改变(以及变量)这一事实。

5 个答案:

答案 0 :(得分:2)

您正在尝试为阵列中的每个元素“命名”。你只是不能那样做。

只需创建一个大小为24的数组(从0到23),不要试图像现在一样“命名”每个元素,你的元素将是p[0]p[1]。直到p[23]

答案 1 :(得分:1)

很难知道您在代码中尝试做什么。这是我最好的猜测:

string p[24];// this allocates your 24-string array

for (int i = 0;i<24;++i)
{
    p[i] = "-";
    cout << p[i];
}

在开始使用之前,请务必定义具有固定大小的阵列。您的代码会编译,但它不会按您的想法执行。我已注释您的原始代码:

for (int i = 0;i<=23;++i)
{
    char b = i;// this seems pointless; basically it does nothing. Keep in mind that a char is just a number. i is already a number.
    string p[b];// allocates an array of strings with b elements. This creates a new, empty, array for *each iteration*. This is definitely not what you want.
    p[b] = "-";// sets the b-th element of the array to "-". This should crash. In a 24-element array, the 24th element is out of bounds. You can only access indices 0-23.
    cout << p[b];
}

答案 2 :(得分:0)

第一次在循环中,数组为“size-zero”,然后你访问一个超过数组末尾的元素。

答案 3 :(得分:0)

您正在访问一个超出范围的数组。

string p[b];
p[b] = "-";

您正在声明一个元素数量为b的数组,因此有效索引的范围为 0到b - 1 。但是你要尝试在b位置进行索引。

第一次循环b为零,不允许大小为0的数组。

答案 4 :(得分:0)

不清楚你要做什么.. 您似乎正在尝试使用C ++编程打印以下行:

"string p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ,p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23;"

并没有在您自己的代码中实际使用这些变量声明。 你编码生成另一个代码吗?

for (int i = 0;i<=23;++i)
{
    char b = i;
    string p[b]; // why do you declare like this? 
    p[b] = "-";
    cout << p[b];
}