cddyy2366 发表于 2020-5-22 15:05:35

C语言switch 函数问题求助

各位大佬你们好!我正在用switch做一个菜单,case 1和case 2都能正常运行但是到case 3的时候我通过调用函数来进行二分查找,在输入需要查找的数字过后程序就不能正常运行了,请问问题在哪里呢,麻烦大佬们帮我看一下case 3,函数应该是没有问题的,谢谢!
代码如下:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int search(int a[],int size,int x)
{
        int left=0;
        int right=size-1;
        int mid=(left+right)/2;
       
        while(left<=right)
        {
                if(x>a)
                {
                        mid++;
                        right--;
                }
               
                else if(x<a)
                {
                        mid--;
                        left++;
                }
               
                else
                {
                        return mid;
                }
        }
        return -1;
}


int main()
{
        FILE*fp;
        fp=fopen("experiment-1.txt","w");
        int radom,i,j,temp,key;
        int num;
        int a;
        srand((int)time(0));
        for(i=0;i<10;i++)
        {
                radom=1+(int)(100.0*rand()/(RAND_MAX+1.0));
                fprintf(fp,"%d ",radom);
        }
        fclose(fp);
       
        printf("--------------------------------------\n");
        printf("1. Reading the data from the file\n");
        printf("2. Sorting algorithms\n");
        printf("3. Binary search algorithm\n\n");
        printf("Select an option\n");
        scanf("%d",&num);
        switch(num)
        {
                case 1:
                        printf("These ten random Numbers are:\n");
                        fp=fopen("experiment-1.txt","r");
                        for(i=0;i<10;i++)
                        {
                                fscanf(fp,"%d",&a);
                                printf("%d ",a);
                        }
                        fclose(fp);break;
                case 2:
                        printf("--------------------------------------\n");
                        printf("2.1 Bubble sort algorithm\n");
                        printf("2.2 Exchange Maximum sort (select)Algorithm\n\n");
                       
                        fclose(fp);
                        printf("Select an option\n");
                        scanf("%d",&num);
                        switch(num)
                        {
                                case 1:
                                        fp=fopen("experiment-1.txt","r");
                                        for(i=0;i<10;i++)
                                        {
                                                fscanf(fp,"%d",&a);
                                        }
                                        for(j=0;j<9;j++)
                                        {
                                                for(i=0;i<9-j;i++)
                                                {
                                                        if(a>a)
                                                        {
                                                                temp=a;
                                                                a=a;
                                                                a=temp;
                                                        }
                                                }
                                        }
                                        for(i=0;i<10;i++)
                                        {
                                                printf("%d ",a);
                                        }
                                        break;
                               
                                case 2:
                                        fp=fopen("experiment-1.txt","r");
                                        for(i=0;i<10;i++)
                                        {
                                                fscanf(fp,"%d",&a);
                                        }
                                        for(i=0;i<9;i++)
                                        {
                                                int min=i;
                                                for(j=i;j<10;j++)
                                                {
                                                        if(a>a)
                                                        {
                                                                min=j;
                                                        }
                                                        temp=a;
                                                        a=a;
                                                        a=temp;
                                                }
                                        }
                                        for(i=0;i<10;i++)
                                        {
                                                printf("%d ",a);
                                        }
                                        break;
                        }break;
                case 3:
                        fp=fopen("experiment-1.txt","r");
                        for(i=0;i<10;i++)
                        {
                                fscanf(fp,"%d",&a);
                        }
                        fclose(fp);
                        int len=sizeof(a)/sizeof(a);
                        printf("--------------------------------------\n");
                        printf("Enter a number you want to find:\n");
                        scanf("%d",key);
                        int ret=search(a,len,key);
                        if(ret==-1)
                        {
                                printf("%d is not exist!\n",key);
                        }
                        else
                        {
                                printf("The %d is the %dth element\n",key,ret+1);
                        }
                        return 0;break;
        }
}

永恒的蓝色梦想 发表于 2020-5-22 15:14:13

swith 是语句。

cddyy2366 发表于 2020-5-22 15:33:14

永恒的蓝色梦想 发表于 2020-5-22 15:14
swith 是语句。

嗯嗯这个我知道 但是为什么在case 3里面会出现问题呢

大裤衩子 发表于 2020-5-22 17:50:19

建议把最后的default默认项加上,再测试哪里有问题{:10_256:}

cddyy2366 发表于 2020-5-22 21:32:51

大裤衩子 发表于 2020-5-22 17:50
建议把最后的default默认项加上,再测试哪里有问题

我在case 3后面添加了一个default 结果运行不了 显示的是 crosses initialization of 'int ret' crosses initialization of 'int len'{:10_266:}

chxchxkkk 发表于 2020-5-23 00:09:13

最好把case 里的语句整合成函数,这里只调用。
页: [1]
查看完整版本: C语言switch 函数问题求助