标题:为什么输出字符串后面跟了一堆乱码? 求助啊~~~~~
只看楼主
思罗琪曼娜
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-17
结帖率:100%
已结贴  问题点数:20 回复次数:2 
为什么输出字符串后面跟了一堆乱码? 求助啊~~~~~
为什么输出字符串后面跟了一堆乱码? 求大神帮忙,先看红色字体部分~~~~~~~~~不胜感激
程序有点长,但错误应该很容易找的。。。。大家回复我~~~~~~

#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 编辑 ]
搜索更多相关主题的帖子: void 不胜感激 include 字符串 
2013-05-18 17:17
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
得分:15 
额,怎么说呢,程序一团糟,而且你那个学号和姓名混在一块了,除过设定学号的位数外没法区分。

代码有点乱,不想看了,我跟你说下折半查找

知道个猜价钱的游戏么?

有个物品,你猜价格,范围是100到0之间。比如说随便定个价格:,43元吧。

你第一次猜50,然后告诉你高了,然后第二次就是25,然后说低了,然后是37(25+12.5),说低了,然后是43(25+12+6),就猜出来了。这就是折半的思想。


Edsger Dijkstra:算法+数据结构=程序
2013-05-18 18:34
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
得分:5 
for(j=6;j!='\0';j++)这里j不可能等于'\0'所以一大堆乱码不为过!
2013-05-18 20:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407428-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083686 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved