C语言编写函数,找某个数存在,结果一直输出0不知道为啥

#include<stdio.h>
int find(int a[],int n,int q)
{
int ret;
int i;
for(i=0;i<n;i++){
if(a[i]=q){
ret=i;
break;
}
else
ret=-1;
}
return ret;
}
int main()
{
int j,num[5];
int x,ret;
for(j=0;j<5;j++){
scanf("%d ",&num[j]);
}
scanf("%d",&x);
ret=find(num,5,x);
printf("%d",ret);
return 0;
}

这个需要弄懂=和==的关系。=在代码中表示赋值,而不是相等的意思。

if语句中,判断a[i]完全等于q,再执行ret=0。

因为如果是等号=, if的表达式执行,表达式的值为=等号右边的值,
如果这个值不等于0则执行if下面的语句体,如果是0则不执行if语句体,你输入:1 2 3 4 5 2 因为要查找的数是2所以if执行,所以返回0就结束了,
所以在判断是否为数组某个数的那里,把那个等于号=改为==就可以了,修改如下:


#include<stdio.h>
int find(int a[],int n,int q)
{
    int ret;
    int i;
    for(i=0;i<n;i++){
        if(a[i]==q){
            ret=i;
            break;
        }
        else
            ret=-1;
    }
    return ret;
}
int main()
{
    int j,num[5];
    int x,ret;
    for(j=0;j<5;j++){
        scanf("%d ",&num[j]);
    }
    scanf("%d",&x);
    ret=find(num,5,x);
    printf("%d",ret);
    return 0;
}

img

注意你的find方法for循环中

if(a[i]=q){
ret=i;
break;
}

a【i】=q是赋值,a【i】==q才是判断为相等
你赋值的是下标,返回为0,大概率为你在给数组赋值时第一个就是你想找的数,第一个的下标为0
if(a【i】==q)
应修改为 ret=a【i】
如有帮助望采纳