这是代码:
#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 ??
任何想法???
答案 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>
当然,您使用分配而不是比较会出现问题。
代码应生成多条警告消息,如果没有,则应启用更多警告。警告通常表明你做的事情在技术上是可行的,但可能会导致问题。