for循环计算不可理解

时间:2015-08-09 16:32:53

标签: c loops for-loop

这是代码:

#include <stdio.h>
void main(){
int n,i,inst,tem,x,y,z;
int num[3] = {100,200,300,400};

    for(x=1; x<n; x++){
        for(y=0; y<x; y++){
            if( num[x] = num[y] ){
                printf("\nsame number: %d",num[y]);
            }
        }
    }

}

我一直试图理解这两天,但似乎无法找到答案。

在我的计算中,不应该有任何&#34;相同的数字&#34;打印在输出屏幕上。但是#34;相同的数字:100&#34;正在展示6次。

为什么6次??? 为什么相同的数字是100 ??

任何想法???

3 个答案:

答案 0 :(得分:2)

根据C标准(6.7.9初始化)

  

2初始化程序不应尝试为对象提供值   包含在正在初始化的实体中。

但是在您的程序中,您尝试为只有3个元素的数组num[3]的元素num提供值。

int num[3] = {100,200,300,400};
       ^^^                ^^^^

同样变量n未初始化。它具有不确定的值,因此程序具有未定义的行为,因为该变量用于循环

for(x=1; x<n; x++){
    for(y=0; y<x; y++){
        if( num[x] = num[y] ){
            printf("\nsame number: %d",num[y]);
        }
    }
}

在if语句中,您使用赋值运算符而不是比较

if( num[x] = num[y] ){
          ^^^

程序中有许多未使用的变量。如果你想让程序符合C标准,函数main应该有返回类型int。

我认为你的意思是以下

#include <stdio.h>

int main( void )
{
    int num[] = { 100, 200, 300, 400 };
    const size_t N = sizeof( num ) / sizeof( *num );

    for ( size_t i = 1; i < N; i++ )
    {
        for ( size_t j = 0; j < i; j++ )
        {
            if ( num[i] == num[j] ) printf( "\nsame number: %d", num[j] );
        }
    }
}

答案 1 :(得分:1)

首先是

if( num[x] = num[y] )

应该是

if( num[x] == num[y] )

您正在使用=分配,==是比较

您的变量n未初始化。因为n是本地的,所以它有一些垃圾值。

并且

int num[3] = {100,200,300,400};错了。

应该是

int num[4] = {100,200,300,400};

int num[] = {100,200,300,400};

答案 2 :(得分:1)

显示的代码将具有未定义的行为。未初始化的非静态局部变量的值是 indeterminate ,您不应在初始化之前使用它们。

您需要将n初始化为数组中的条目数(即3,或者更好(sizeof(num) / sizeof(num[0])),否则外循环将运行不确定的次数。< / p>

当然,您使用分配而不是比较会出现问题。

代码应生成多条警告消息,如果没有,则应启用更多警告。警告通常表明你做的事情在技术上是可行的,但可能会导致问题。