| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 803 人关注过本帖
标题:此题最好能用struct和指针,有注释就更好啦!实在指针和struct在一起就会乱 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
scanf后必须跟地址  这个看书就好了

DO IT YOURSELF !
2015-03-25 10:52
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
收藏
得分:0 
明白了,谢谢!
居然忘了最基本的
2015-03-25 10:58
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:3 
程序代码:
#include <glib.h>
#include <stdio.h>
#include <float.h>
#include <string.h>
#include <ctype.h>

typedef struct product {
    int sn;
    char name[30];
    double price;
    char etc[30];
} item;

void eateline(void) {
    while(getchar() != '\n') continue;
}

char showmenu(void) {
    char ans;
    puts("请选择菜单项:\n");
    puts("i) 录入数据            p) 输出数据");
    puts("s) 价格排序            c) 高价计数");
    puts("u) 价格调整            m) 返回菜单");
    puts("q) 退出程序\n");
    ans = tolower(getchar());
    eateline();

    while(strchr("ipscumq", ans) == NULL) {
        puts("请输入 i, p, s, c, u, m or q:");
        ans = tolower(getchar());
        eateline();
    }

    return ans;
}

int reg_item(item *p) {
    int flag = 0;

    if(scanf("%d%s%lf%s", &p->sn, p->name, &p->price, p->etc) == 4)
        flag = 1;

    eateline();

    return flag;
}

void show_item(item *p) {
    printf("%d\t%s\t%.1f\t%s\n", p->sn, p->name, p->price, p->etc);
}

void prt_arr(GArray *garr, int len) {
    int i;

    if(len > 0) {
        for(i = 0; i < len; i++) {
            show_item(&g_array_index(garr, item, i));
        }

    } else puts("无数据可供输出...");
}

int cmp(item *p1, item *p2) {
    double a1 = p1->price;
    double a2 = p2->price;

    if(a1 - a2 < DBL_EPSILON) return -1;

    else if(a1 == a2) return 0;

    else return 1;
}

void sort_prt_arr(GArray *garr, int len) {
    g_array_sort_with_data(garr, (GCompareDataFunc)cmp, NULL);
}

int max_count(GArray *garr, int len) {
    int count = 0 , i;

    for(i = 0; i < len; i++) {
        if(g_array_index(garr, item, i).price ==
                g_array_index(garr, item, len - 1).price) {
            count++;
            show_item(&g_array_index(garr, item, i));
        }
    }

    return count;
}

void update_price(GArray *garr, int snum, char *sname, double range, int len) {
    int i, flag = 1;

    for(i = 0; i < len; i++) {
        if(strcmp(g_array_index(garr, item, i).name, sname) == 0 &&
                g_array_index(garr, item, i).sn == snum) {
            g_array_index(garr, item, i).price *= (range + 1);
            flag = 0;
            break;
        }
    }

    if(flag) puts("未找到可供调价的商品");
}

int main(int argc, char** argv) {
    int len = 0, maxcount = 0, snum = 0;
    char sname[30] = {0}, choice;
    double range = 0.0;
    GArray *garr;
    item newitem, *p = &newitem;
    garr = g_array_new(FALSE, FALSE, sizeof(item));

    while((choice = showmenu()) != 'q') {
        switch(choice) {
            case 'i':
                puts("\n***************** 录入数据 ********************\n");

                while(reg_item(p)) {
                    g_array_append_val(garr, newitem);
                    len++;
                }

                puts("\n***********************************************\n");
                break;

            case 'p':
                puts("\n***************** 输出数据 ********************\n");
                prt_arr(garr, len);
                puts("\n***********************************************\n");
                break;

            case 's':
                puts("\n***************** 价格排序 ********************\n");
                sort_prt_arr(garr, len);
                prt_arr(garr, len);
                puts("\n***********************************************\n");
                break;

            case 'c':
                puts("\n***************** 高价计数 ********************\n");
                maxcount = max_count(garr, len);
                printf("最高价的商品数: %d\n", maxcount);
                puts("\n***********************************************\n");
                break;

            case 'u':
                puts("\n***************** 价格调整 ********************\n");

                if(len) {
                    puts("输入要调整的编号、商品名、调整比率");
                    scanf("%d%s%lf", &snum, sname, &range);
                    eateline();
                    update_price(garr, snum, sname, range, len);
                    prt_arr(garr, len);

                } else puts("无商品可供调价");

                puts("\n***********************************************\n");
                break;

            case 'm':
                puts("\n***********************************************\n");
                break;
        }
    }

    g_array_free(garr, TRUE);

    return 0;
}



请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

i

***************** 录入数据 ********************

1 a 12.5 aaa
2 b 12.5 ccc
3 c 10.8 fff
4 d 11.3 aac
5 e 7.5 kkk
q

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

p

***************** 输出数据 ********************

1       a       12.5    aaa
2       b       12.5    ccc
3       c       10.8    fff
4       d       11.3    aac
5       e       7.5     kkk

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

s

***************** 价格排序 ********************

5       e       7.5     kkk
3       c       10.8    fff
4       d       11.3    aac
1       a       12.5    aaa
2       b       12.5    ccc

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

c

***************** 高价计数 ********************

1       a       12.5    aaa
2       b       12.5    ccc
最高价的商品数: 2

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

u

***************** 价格调整 ********************

输入要调整的编号、商品名、调整比率
2 b 0.3
5       e       7.5     kkk
3       c       10.8    fff
4       d       11.3    aac
1       a       12.5    aaa
2       b       16.3    ccc

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

m

***********************************************

请选择菜单项:

i) 录入数据            p) 输出数据
s) 价格排序            c) 高价计数
u) 价格调整            m) 返回菜单
q) 退出程序

q

Press any key to continue.

Only the Code Tells the Truth             K.I.S.S
2015-03-25 15:02
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
收藏
得分:0 
虽然这两个头文件名没学过#include <glib.h>   #include <ctype.h>,但是这个程序值得我这个菜鸟好好研究
谢谢
2015-03-25 19:46
快速回复:此题最好能用struct和指针,有注释就更好啦!实在指针和struct在一起就 ...
数据加载中...
 
   



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

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