Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C for循环中的if条件_C - Fatal编程技术网

C for循环中的if条件

C for循环中的if条件,c,C,该程序输出1。我无法理解它是如何输出1的,因为for循环将在包含值12的a[2][3]处失败。所以12将被分配给k,输出必须是12 #include<stdio.h> int main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int i,j,k=99; for(i=0;i<3;i++) { for(j=0;j<4;j++) { if

该程序输出1。我无法理解它是如何输出1的,因为for循环将在包含值12的
a[2][3]
处失败。所以12将被分配给k,输出必须是12

#include<stdio.h>

int main()
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int i,j,k=99;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            if(a[i][j]<k)
            {
                k=a[i][j];
                printf("%d\n",k);
            }
        }
    }
    printf("Res:%d\n",k);
    return 0;
}
#包括
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,j,k=99;

对于(i=0;i在这一行中,您正在更改K值

k=a[i][j]


您运行的第一次迭代将k更改为1,这就是第二次迭代失败的原因。在每次迭代中,您的k将比if语句正常工作时的k值少一个单位

k=a[i][j]


您运行的第一次迭代将k更改为1,这就是第二次迭代失败的原因。在每次迭代中,您的k将比if语句第一次通过循环时的应值少一个单位,if将被评估为[0][0]k永远不会被重新分配另一个值,因此在k=1结束时。

第一次通过循环时,if被评估为[0][0]一些注释:

调用变量
k
并不能告诉我们您使用它的目的。如果您调用它
arrayMin
,我们会更清楚。使用
i
j
作为循环索引是可以的,这是意料之中的

分配
k=99
会对数组的内容进行假设,因此会产生脆弱的代码。最好不要进行假设,从分配
arrayMin=a[0][0]

您的程序很小,很简单,您可以在纸上自己运行。这样做可以帮助您了解发生了什么。使用调试器单步执行也会有所帮助。

一些评论:

调用变量
k
并不能告诉我们您使用它的目的。如果您调用它
arrayMin
,我们会更清楚。使用
i
j
作为循环索引是可以的,这是意料之中的

分配
k=99
会对数组的内容进行假设,因此会产生脆弱的代码。最好不要进行假设,从分配
arrayMin=a[0][0]


你的程序很小,很简单,你可以自己在纸上运行。这样做可以帮助你看到发生了什么。使用调试器单步执行也会有帮助。

a[i][j]i==0,j==0等于1,1小于99,因此它输出1@Beata:您是否曾尝试在调试器中运行您的程序?@yi_H:抱歉,我没有尝试在调试器中运行。我使用的是visual studio。这是一个典型的函数,用于查找最小值,因此1是正确的。若要查找最大值,请将
k
指定给
a[i][j]>k
并以
k=MIN_INT;
或类似的开头。a[i][j]i==0,j==0等于1,1小于99,因此它输出1@Beata:您是否曾尝试在调试器中运行您的程序?@yi_H:抱歉,我没有尝试在调试器中运行。我使用的是visual studio。这是一个典型的函数,用于查找最小值,因此1是正确的。若要查找最大值,请将
k
指定给
a[i][j]>k
并以
k=MIN_INT;
或类似的开头。抱歉..以后我将尝试在纸上解决简单的示例。抱歉..以后我将尝试在纸上解决简单的示例。