| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1510 人关注过本帖
标题:strcmp 返回值的问题
只看楼主 加入收藏
Gavinzhz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-26
收藏
 问题点数:0 回复次数:10 
strcmp 返回值的问题
#include <stdio.h>
#include <string.h>

struct student
{
    char name[20];
    float score;
};

float Find(struct student *ff,char *fp);

int main()
{
    struct student stu[5]={"zhangsan",56,"lisi",87,"wangwu",94,"zhaoliu",65,"sunqi",88};
    char nam[20];
    float i;   

    printf("请输入需要查询的学生的姓名:\n");
    fgets(nam,20,stdin);

    i=Find(stu,nam);
   
    if(i<0)
        printf("没有这个学生!\n");
    else
        printf("姓名:%10s 成绩:%3.1f\n",nam,i);
}

float Find(struct student *ff,char *fp)
{
    int fp_i;
    char fp_name[20];
   
    for(fp_i=0;fp_i<strlen(fp);fp_i++)
        fp_name[fp_i]=*(fp+fp_i);
        
    for(fp_i=0;fp_i<5;fp_i++,ff++)
    {
        if(strcmp((ff->name),fp_name)==0)
            return ff->score;
    }
    return -1;
}

查询的学生是wangwu
调试查看了ff->name和fp_name的值都是wangwu的时候,后面strcmp((ff->name),fp_name)的时候返回-1
那位大哥大姐能帮忙看一下哪里出了问题,谢谢了。
搜索更多相关主题的帖子: 姓名 include 
2013-03-26 12:27
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
for(fp_i=0;fp_i<strlen(fp);fp_i++)        fp_name[fp_i]=*(fp+fp_i);
fp_name[fp_i]='\0';

总有那身价贱的人给作业贴回复完整的代码
2013-03-26 12:37
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
float Find(struct student *ff,char *fp)
 {
     int fp_i;
     char fp_name[20];
     
    for(fp_i=0;fp_i<strlen(fp);fp_i++)
         fp_name[fp_i]=*(fp+fp_i);

// 字符串是要\0 结尾的
直接(strcmp((ff->name),fp)==0 不就行了,为什么就是要弄那么多的花哨

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-26 12:37
Gavinzhz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-26
收藏
得分:0 
回复 3楼 yuccn
关键是不行,开始我是那么写的,后面调试发现fp只是字符串的首字母,编译器一直爆警告,然后才新添了一个字符数组的
PS:我是在Linux中编译运行的
2013-03-26 12:41
Gavinzhz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-26
收藏
得分:0 
回复 2楼 embed_xuel
函数strlen的长度不包含字符串最后面的\0,所以不会出现赋值给数组最后的一个字符时\0的情况。
2013-03-26 12:44
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 5楼 Gavinzhz
什么意思?我二楼加的那行代码就是加结束符的

总有那身价贱的人给作业贴回复完整的代码
2013-03-26 12:47
Gavinzhz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-26
收藏
得分:0 
回复 6楼 embed_xuel
你的意思是不是说在给fp_name赋值的最后在加一个'\0'?
若是这个意思的话,还是一样的结果
添加之后
fp_name="wangwu\n\000\000\000"
添加之前
也是的一样的

[ 本帖最后由 Gavinzhz 于 2013-3-26 13:14 编辑 ]
2013-03-26 12:59
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 7楼 Gavinzhz
原因在于 fgets(nam,20,stdin);
fgets获取到的字符串会多带个'\n'

总有那身价贱的人给作业贴回复完整的代码
2013-03-26 14:25
Gavinzhz
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-26
收藏
得分:0 
哈 终于搞定了
是前面输入使用fgets让字符数组nam的未赋值部分出现其他变化
将fgets函数改为gets或是scanf就可以了。

谢谢embed_xuel和yuccn。
2013-03-26 14:25
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 7楼 Gavinzhz
这样改试试
for(fp_i=0;fp_i<strlen(fp);fp_i++)        fp_name[fp_i]=*(fp+fp_i);
fp_name[fp_i-1]='\0';

总有那身价贱的人给作业贴回复完整的代码
2013-03-26 14:39
快速回复:strcmp 返回值的问题
数据加载中...
 
   



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

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