为什么输出字符串后面跟了一堆乱码? 求助啊~~~~~
为什么输出字符串后面跟了一堆乱码? 求大神帮忙,先看红色字体部分~~~~~~~~~不胜感激程序有点长,但错误应该很容易找的。。。。大家回复我~~~~~~
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 10
char Name[N][27];
void input(char a[][27]);
void rank();
void find(char str[]);
int main()
{
char hao[7],c;
input(Name);
rank();
do
{
printf("菜单:0.退出程序;1.查找职工姓名:\n请选择:");
c=getchar();
if(c=='1')
{
printf("\n请输入要查找的职工号:");
gets(hao);
printf("\n");
find(hao);
}
}
while(c!='0');
return 0;
}
void input(char a[][27])
{
int i;
printf("请分别输入10个职工的职工号和姓名(例:201223zhengyidan):\n");
for(i=0;i<N;i++)
gets(a[i]);
printf("\n");
}
void rank()
{
int i,j;
char string[27];
printf("由小到大排序为:\n");
for(j=0;j<N-1;j++)
for(i=0;i<N-1-j;i++)
if(strcmp(Name[i],Name[i+1])>0)
{
strcpy(string,Name[i]);
strcpy(Name[i],Name[i+1]);
strcpy(Name[i+1],string);
}
for(i=0;i<N;i++)
puts(Name[i]);
}
void find (char str[7])
{
int j,n,i;
char a[N][7];
gets(str);
printf("职工号为%s的职工姓名为:",str);
for(i=0;i<N;i++)
{
for(j=0;Name[i][j]<'A';j++)
a[i][j]=Name[i][j];
a[i][j]='\0';
} //以上成功
if(strcmp(str,a[9])==0)
{ //在这里出错了,如果我在程序中输入201201yi,201202er,.....,
for(j=6;j!='\0';j++) //到 201210shi嘛,然后它排序,然后我输入201210, 它能出现 shi,
printf("%c",Name[9][j]); //但后面跟了一大堆乱码,然后它关闭程序(这个是折半查找法,
printf('\0'); //我不知道折半查找法是什么,所以先去掉了最后一个,中间值一个个
} //找).。我的问题是:它后面为什么跟了一堆乱码?
else
{
for(j=4,n=1;strcmp(str,a[i])!=0&&n>=0;n--)
{
if(strcmp(str,a[i])>0)
i=i+pow(2,n);
else i=i-pow(2,n);
}
if(strcmp(str,a[i])==0)
{
for(j=6;j!='\0';j++)
printf("%c",Name[i][j]);
printf("\n");
}
else printf("sorry,此职工号无效\n");
}
}
[ 本帖最后由 思罗琪曼娜 于 2013-5-18 17:46 编辑 ]