| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 438 人关注过本帖
标题:为什么下面的用结构体传递形参有误哦?
只看楼主 加入收藏
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
为什么下面的用结构体传递形参有误哦?
#include <stdio.h>
#include <string.h>
struct books{          /* 构造结构体 */
    char name;          /* 名称 */
    int price;              /* 定价 */
    }b,book[10];
int search_book(struct books *p);
int main()
{
    int i;
    for(i=0;i<10;i++)      /*键盘输入是本书的名称和价格*/
    {
        scanf("%c,%d\n",&book[i].name,&book[i].price);
    }
    search_book(struct books book);/*调用搜索结果*/
    return 0;
}   
int search_book(struct books *p)    /*查书*/
{
    int i;
    scanf("%c\n",b.name);
    for(i=0;i<10;i++)
    {
        if(b.name==p->name)
            printf("%c,%d\n",book[i].name,book[i].price);
        p++;
    }
    return 0;
}
int arrange_book(struct books a[])
{
    int i,temp;
    char tempc;
    for(i=0;i<10;i++)         /*输出价格最高的书*/
    {
        if(a[i].price<=a[i+1].price)
        {
            tempc=a[i].name;
            temp=a[i].price;
            a[i].name=a[i+1].name;
            a[i].price=a[i+1].price;
            a[i+1].name=tempc;
            a[i+1].price=temp;
        }
    }
    printf("%c,%d\n",a[i].name,a[i].price);
    for(i=0;i<10;i++)         /*输出价格最低的书*/
    {
        if(a[i].price>=a[i+1].price)
        {
            tempc=a[i].name;
            temp=a[i].price;
            a[i].name=a[i+1].name;
            a[i].price=a[i+1].price;
            a[i+1].name=tempc;
            a[i+1].price=temp;
        }
    }
    printf("%c,%d\n",a[i].name,a[i].price);
    return 0;
}
搜索更多相关主题的帖子: 搜索结果 include return 
2012-11-17 11:20
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:5 
int search_book(struct books *p);
所以main中直接传数组地址,search_book中scanf那里也看一下是否正确,
另外可能还要注意是否吃掉回车
2012-11-17 11:39
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
收藏
得分:0 
回复 2楼 jk_love
哦哦。。。scanf 怎么吃掉了回车?

没有伞的孩子,只能努力奔跑。
2012-11-17 12:11
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:0 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-17 13:32
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:15 
第13行         scanf("%c,%d\n",&book[i].name,&book[i].price);  很少有scanf里边有\n的,如果用了,在键盘里面必须要输入\n才算对,因为scanf只认得转换说明符,并不会把\n理解为回车。
如果改成scanf("%c,%d",&book[i].name,&book[i].price),scanf在读取了输入的整数之后,缓冲区还有个回车会被下一个循环的%c读取,因为%c不跳过回车符号,所以要在这一句下面加上一串代码清空缓冲区的回车:
    while(getchar()!='\n')
    continue;
另外,scanf("%c\n",b.name);也要去掉\n
search_book(struct books book);/*调用搜索结果*/  传实参不要写类型名struct books

改了这几个地方 程序就可以运行了
2012-11-17 22:32
快速回复:为什么下面的用结构体传递形参有误哦?
数据加载中...
 
   



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

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