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;
}
} swith 是语句。 永恒的蓝色梦想 发表于 2020-5-22 15:14
swith 是语句。
嗯嗯这个我知道 但是为什么在case 3里面会出现问题呢 建议把最后的default默认项加上,再测试哪里有问题{:10_256:} 大裤衩子 发表于 2020-5-22 17:50
建议把最后的default默认项加上,再测试哪里有问题
我在case 3后面添加了一个default 结果运行不了 显示的是 crosses initialization of 'int ret' crosses initialization of 'int len'{:10_266:} 最好把case 里的语句整合成函数,这里只调用。
页:
[1]