我声明一个全局数组,然后在if语句中分配值。但是当我在另一个if语句中使用该数组时,该数组具有不同于我先前分配的值。 例如:
int arr[5];
xyz(bool p,bool q)
{
if(p)
{
for(int i=0;i<5;i++)
{
arr[i]=rand()%100;
}
}
if(q)
{
for(i=0;i<5;i++)
printf("%d",arr[i]);
}
}
任何人都可以帮忙吗?
答案 0 :(得分:1)
好吧,如果p != q
,那么当您输入第二个条件时,您在第一个条件中对arr
所做的任何更改都不会被打印。如果arr
从未初始化,那么它几乎不会具有您期望的值。
编辑:根据您的评论,尝试使用std::vector<int>
代替C风格的整数数组,如:
#include <vector>
std::vector<int> arr(5); // was int arr[5]
还有一些建议:
arr
作为局部变量,并在需要时将其作为参数传递。这有助于查看代码的人知道它需要什么以及它访问什么,而无需实际挖掘代码来查看所有内容。在你不知道的情况下,有可能(甚至可能)其他东西正在改变arr
。如果你总是传递参数并且不使用全局变量,这将有助于你发现它被改变的位置。所以,结合这些,我建议做类似的事情:
#include <vector>
#include <iostream>
xyz(std::vector<int>& arr, bool p, bool q)
{
std::vector<int>::iterator ai;
if(p)
{
for(ai = arr.begin(); ai != arr.end(); ++ai)
{
*ai = rand() % 100;
}
}
if(q)
{
for(ai = arr.begin(); ai != arr.end(); ++ai)
{
std::cout << *ai << std::endl;
}
}
}
int main()
{
std::vector<int> arr(5);
xyz(arr, true, false);
xyz(arr, false, true);
return 0;
}
答案 1 :(得分:0)
尝试将您的第一个代码块调整为更像这样的代码:
if (p) {
int temp;
for (int i=0; i<5; i++) {
temp = rand() % 100;
printf("%i: %d\n", i, temp);
arr[i] = temp;
}
}
现在,您将在将随机值写入数组之前获得列表。将此列表与稍后从阵列中读取它们时得到的结果进行比较。
更新:我在键盘上运行了the above modification to your code,而且我两次都看到了完全相同的值。
答案 2 :(得分:0)
我甚至不知道为什么你要添加那些'bool'变量,因为你没有创建从不运行它! 所以只需使用此代码[与beta的版本相同];
int temp;
for (int i=0; i<5; i++) {
temp = rand() % 100;
cout << i << temp << endl;
arr[i] = temp;
}