鱼C论坛

 找回密码
 立即注册
查看: 1665|回复: 5

C语言switch 函数问题求助

[复制链接]
发表于 2020-5-22 15:05:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


  31. int main()
  32. {
  33.         FILE*fp;
  34.         fp=fopen("experiment-1.txt","w");
  35.         int radom,i,j,temp,key;
  36.         int num;
  37.         int a[10];
  38.         srand((int)time(0));
  39.         for(i=0;i<10;i++)
  40.         {
  41.                 radom=1+(int)(100.0*rand()/(RAND_MAX+1.0));
  42.                 fprintf(fp,"%d ",radom);
  43.         }
  44.         fclose(fp);
  45.        
  46.         printf("--------------------------------------\n");
  47.         printf("1. Reading the data from the file\n");
  48.         printf("2. Sorting algorithms\n");
  49.         printf("3. Binary search algorithm\n\n");
  50.         printf("Select an option\n");
  51.         scanf("%d",&num);
  52.         switch(num)
  53.         {
  54.                 case 1:
  55.                         printf("These ten random Numbers are:\n");
  56.                         fp=fopen("experiment-1.txt","r");
  57.                         for(i=0;i<10;i++)
  58.                         {
  59.                                 fscanf(fp,"%d",&a[i]);
  60.                                 printf("%d ",a[i]);
  61.                         }
  62.                         fclose(fp);break;
  63.                 case 2:
  64.                         printf("--------------------------------------\n");
  65.                         printf("2.1 Bubble sort algorithm\n");
  66.                         printf("2.2 Exchange Maximum sort (select)Algorithm\n\n");
  67.                        
  68.                         fclose(fp);
  69.                         printf("Select an option\n");
  70.                         scanf("%d",&num);
  71.                         switch(num)
  72.                         {
  73.                                 case 1:
  74.                                         fp=fopen("experiment-1.txt","r");
  75.                                         for(i=0;i<10;i++)
  76.                                         {
  77.                                                 fscanf(fp,"%d",&a[i]);
  78.                                         }
  79.                                         for(j=0;j<9;j++)
  80.                                         {
  81.                                                 for(i=0;i<9-j;i++)
  82.                                                 {
  83.                                                         if(a[i]>a[i+1])
  84.                                                         {
  85.                                                                 temp=a[i];
  86.                                                                 a[i]=a[i+1];
  87.                                                                 a[i+1]=temp;
  88.                                                         }
  89.                                                 }
  90.                                         }
  91.                                         for(i=0;i<10;i++)
  92.                                         {
  93.                                                 printf("%d ",a[i]);
  94.                                         }
  95.                                         break;
  96.                                
  97.                                 case 2:
  98.                                         fp=fopen("experiment-1.txt","r");
  99.                                         for(i=0;i<10;i++)
  100.                                         {
  101.                                                 fscanf(fp,"%d",&a[i]);
  102.                                         }
  103.                                         for(i=0;i<9;i++)
  104.                                         {
  105.                                                 int min=i;
  106.                                                 for(j=i;j<10;j++)
  107.                                                 {
  108.                                                         if(a[min]>a[j])
  109.                                                         {
  110.                                                                 min=j;
  111.                                                         }
  112.                                                         temp=a[i];
  113.                                                         a[i]=a[min];
  114.                                                         a[min]=temp;
  115.                                                 }
  116.                                         }
  117.                                         for(i=0;i<10;i++)
  118.                                         {
  119.                                                 printf("%d ",a[i]);
  120.                                         }
  121.                                         break;
  122.                         }break;
  123.                 case 3:
  124.                         fp=fopen("experiment-1.txt","r");
  125.                         for(i=0;i<10;i++)
  126.                         {
  127.                                 fscanf(fp,"%d",&a[i]);
  128.                         }
  129.                         fclose(fp);
  130.                         int len=sizeof(a)/sizeof(a[0]);
  131.                         printf("--------------------------------------\n");
  132.                         printf("Enter a number you want to find:\n");
  133.                         scanf("%d",key);
  134.                         int ret=search(a,len,key);
  135.                         if(ret==-1)
  136.                         {
  137.                                 printf("%d is not exist!\n",key);
  138.                         }
  139.                         else
  140.                         {
  141.                                 printf("The %d is the %dth element\n",key,ret+1);
  142.                         }
  143.                         return 0;break;
  144.         }
  145. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-22 15:14:13 | 显示全部楼层
swith 是语句。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-22 15:33:14 | 显示全部楼层

嗯嗯这个我知道 但是为什么在case 3里面会出现问题呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 17:50:19 | 显示全部楼层
建议把最后的default默认项加上,再测试哪里有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-22 21:32:51 | 显示全部楼层
大裤衩子 发表于 2020-5-22 17:50
建议把最后的default默认项加上,再测试哪里有问题

我在case 3后面添加了一个default 结果运行不了 显示的是[Error] crosses initialization of 'int ret' [Error] crosses initialization of 'int len'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 00:09:13 | 显示全部楼层
最好把case 里的语句整合成函数,这里只调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-2 17:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表