这是一个菜鸟问题。我有一个名为 Counter[N][N]
的数组,我想做类似的事情:
While (each element of Counter < 10000) {do something}
While (there exists an element of Counter < 10000) {do something}
在 C 中是否有一种简单的方法可以做到这一点?
最佳答案
该函数测试传入的计数器数组是否有小于指定值的元素:
bool has_element_less_than(int value, int counter[N][N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (counter[i][j] < value)
return true;
}
}
return false;
}
你使用它:
if (has_element_less_than(10000, counter))
do_something();
您可以通过将 N 作为参数传递给函数来处理 C99 中的可变维度数组。它假定您有 C99 header <stdbool.h>
可用并包含在内。
这就是你想要的吗?你提到“虽然”所以不清楚你是否需要使用 while
循环——如果你这样做,我认为这可以完成工作:
int i = 0;
while (i < N)
{
int j = 0;
while (j < N)
{
if (counter[i][j] < 10000)
{
counter[i][j] = do_something(i, j, counter[i][j]);
}
j++;
}
i++;
}
或者,更通俗地使用 for
循环:
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (counter[i][j] < 10000)
{
counter[i][j] = do_something(i, j, counter[i][j]);
}
}
}
请注意,此代码使用的是 C99;你可以申报i
和 j
在循环之外,它变成了 C89 代码。此外,如果出于任何原因您需要 i
或 j
(或者更可能是两者)在循环之后,您需要在循环外声明变量。
第二个解决方案 for
loops 更符合 C 语言的习惯; for
loop 非常适合这项工作,也是您应该计划使用的,尤其是因为它将所有循环控件打包在一行中,这与 while
不同。循环解决方案,其中一行(循环外)有初始化代码,另一行有条件,第三行有重新初始化。
关于整数数组的 C While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545116/