菜鸡求教

xx0510 2003-06-06 06:09:57
这是输入N对工号和姓名,再按工号排序,然后输入一个工号查找姓名的程序,
如果输入工号时输入一个字母,会重复上次的结果,这是为什么?
#include<stdio.h>
#define N 1
void input(int num[],char name[][8])
{
int i;
for(i=0;i<N;i++){
printf("\nInput NO.:");
scanf("%d",&num[i]);
printf("Input name:");
fflush(stdin);
gets(name[i]);
}
}

void sort(int num[],char name[][8])
{
int i,j,min,temp1;
char temp2[8];
for(i=0;i<N-1;i++){
min=i;
for(j=i;j<N;j++)
if(num[min]>num[j]) min=j;
temp1=num[i];
num[i]=num[min];
num[min]=temp1;
strcpy(temp2,name[i]);
strcpy(name[i],name[min]);
strcpy(name[min],temp2);
}
printf("\nresult:\n");
for(i=0;i<N;i++)
printf("\n%5d%10s",num[i],name[i]);
}

void search(int n,int num[],char name[][8])
{
int loca=-1,top=0,bott=N-1,mid;
if(n>=num[top]&&n<=num[bott])
while(top<=bott){
mid=(top+bott)/2;
if(n==num[mid]){
loca=mid;
printf("NO.%d,his name is %s.\n",n,name[loca]);
break;
}else if(n<num[mid])
bott=mid-1;
else
top=mid+1;
}
if(loca==-1)
printf("can not find %d.\n",n);
}

main()
{
int num[N],number,flag=1,c;
char name[N][8];
input(num,name);
sort(num,name);
while(flag==1){
printf("\nInput number to look for:");
scanf("%d",&number);
search(number,num,name);
while(flag==1){
printf("Continue or not(Y/N)?");
fflush(stdin);
c=getchar();
if(c=='N'||c=='n')
flag=0;
else if(c=='Y'||c=='y')
break;
}
}
}
...全文
46 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzytony 2003-06-06
  • 打赏
  • 举报
回复

同意
tackdhly 2003-06-06
  • 打赏
  • 举报
回复
路过。UP一下。
libiyan 2003-06-06
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 7
void input(int num[],char name[][8])
{
int i;
for(i=0;i<N;i++){
printf("\nInput NO.:\n");
scanf("%d",&num[i]);
printf("Input name:\n");
fflush(stdin);
gets(name[i]);
}
}

void sort(int num[],char name[][8])
{
int i,j,min,temp1;
char temp2[8];
for(i=0;i<N-1;i++){
min=i;
for(j=i;j<N;j++)
if(num[min]>num[j]) min=j;
temp1=num[i];
num[i]=num[min];
num[min]=temp1;
strcpy(temp2,name[i]);
strcpy(name[i],name[min]);
strcpy(name[min],temp2);
}
printf("\nresult:\n");
for(i=0;i<N;i++)
printf("\n%5d%10s",num[i],name[i]);
}

void search(int n,int num[],char name[][8])
{
int loca=-1,top=0,bott=N-1,mid;
if(n>=num[top]&&n<=num[bott])
while(top<=bott){
mid=(top+bott)/2;
if(n==num[mid]){
loca=mid;
printf("NO.%d,his name is %s.\n",n,name[loca]);
break;
}else if(n<num[mid])
bott=mid-1;
else
top=mid+1;
}
if(loca==-1)
printf("can not find %d.\n",n);
}

main()
{
int num[N],number,flag=1,c;
char name[N][8];
clrscr();
input(num,name);
sort(num,name);
while(flag==1)
{
printf("\nInput number to look for:");
scanf("%d",&number);
search(number,num,name);
printf("Continue or not(Y/N)?");
fflush(stdin);
c=getchar();
if(c=='N'||c=='n')
flag=0;
else if(c=='Y'||c=='y')
flag=1;

}
}
zhzc3911 2003-06-06
  • 打赏
  • 举报
回复
up
surgeon 2003-06-06
  • 打赏
  • 举报
回复
你可以自己用c++ 的debug来看内存值
arfi 2003-06-06
  • 打赏
  • 举报
回复
int scanf( const char *format [,argument]... );
你要求输入一个整数,当你输入一个字母的时候,应该算是一个错误,scanf()的返回值为0,而你的number值不变化。如果第一次就输入的是一个字母,而number也没初始化,结果还可能不可预料。
binjuny 2003-06-06
  • 打赏
  • 举报
回复
内存的赋值是任意的,,若这次不成功,他可能会把上次值拿来用

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧