c语言问题,提示局部变量不合法,还有函数应用不合法求帮助

有没有人在啊,想请讲解下,c语言问题,提示局部变量不合法,还有函数应用不合法求帮助?

#include <stdio.h>char name[10][10];int number[10];void in(){int i;for(i=0;i<=9;++i){printf("%d name here\n",i+1);scanf("%s",&name[i]);printf("%d id number here\n",i+1);scanf("%d",&number[i]);}
void sort(){int i,k,l;char s;for (i=9;i>0;--i){for(l=i;l>0;--l) if (number[l]<number[l-1]) {k=number[l-1]; number[l-1]=number[l]; number[l]=number[l-1]; s=name[l-1]; name[l-1]=name[l]; name[l]=name[l-1];}}}
void search(){int n=i=10;int y=0;int c;printf("please put the number you're looking for");scanf("%d",&c);while(y==0){n=i/2;if (c==number[n]){y=1c=n;};else{if (c>number[n]){n=(n+i)/2};if (c<number[n]){n=(i-n)/2};}}printf("%s\n",name[c]);}
int main() {in();sort();search();return 0;}
最新回答
し①泩呮嗳︶ㄣ

2025-06-18 19:38:58

如果只是帮你看这个问题的话,那是因为你少打了一个反花括号,在 in() 函数尾部。

下面这个代码可以编译通过,一些改动之前的代码我在放在注释了。

但是我看你的search(),你是打算用二分查找(Binary Search)是吗?但是我觉得这个代码不可行,应该会死循环,而且我的测试后的确死循环了。

建议你再看看二分查找的实现。

#include <stdio.h>
#include <string.h>
char name[10][10];
int number[10];
void in()
{
    int i;
    for(i=0; i<=9; ++i)
    {
        //printf("%d name here\n",i+1);
        scanf("%s",name[i]);
        //printf("%d id number here\n",i+1);
        scanf("%d",&number[i]);
    }
}
void sort()
{
    int i,k,l;
    char s[10];  //char s;
    for (i=9; i>0; --i)
    {
        for(l=i; l>0; --l)
            if (number[l]<number[l-1])
            {
                k=number[l-1];
                number[l-1]=number[l];
                number[l]=k;  //number[l]=number[l-1];
                strcpy(s,name[l-1]);  //s=name[l-1];
                strcpy(name[l-1],name[l]);  //name[l-1]=name[l];
                strcpy(name[l],s);  //name[l]=name[l-1];
            }
    }
}
void search()
{
    int n=10,i=10;
    int y=0;
    int c;
    printf("please put the number you're looking for");
    scanf("%d",&c);
    while(y==0)
    {
        n=i/2;
        if (c==number[n])
        {
            y=c=n;
        }
        else
        {
            if (c>number[n])
            {
                n=(n+i)/2;
            }
            if (c<number[n])
            {
                n=(i-n)/2;
            }
        }
    }
    printf("%s\n",name[c]);
}
int main()
{
    in();
    sort();
    search();
    return 0;
}
追问
二分法错了吗?字符数组的赋值一定要用strcpy吗?
追答

字符数组赋值不能直接赋值,需要strcpy()(你也可以自己写一个)。

二分法不对。

顺便帮你改一下好了,这是我比较喜欢的写法,你看下思路,然后按你喜欢的方式写。

注意:没有处理未找到的情况。

void search()
{
    int n,i=0,j=9;
    int y=-1;
    int c;
    printf("please put the number you're looking for");
    scanf("%d",&c);
    while (i<=j)
    {
        n=(i+j)/2;
        if (number[n]==c)
        {
            y=n;
            break;
        }
        else if (number[n]<c)
        {
            i=n;
        }
        else
        {
            j=n;
        }
    }
    printf("%s\n",name[y]);
}