鱼C论坛

 找回密码
 立即注册
查看: 1535|回复: 5

[已解决]投票系统,求解惑一下。已经把自己搞晕了

[复制链接]
发表于 2018-8-18 21:18:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define PF printf
#define NUM 10

struct per  //结构体PER 带有两个CAHR属性
{
        char name[20];
        int nuber;
}man[4]={{"赵",0},{"钱",0},{"孙",0},{"李",0}};
void main()
{
        int i;
        int j=0;
        int max=0;
        int min=0;
        char a[4];
        PF("候选人有:%s %s %s %s\n",man[0].name,
                man[1].name,man[2].name,man[3].name);
        for(i=0;i<10;i++)
        {
                PF("输入候选人名称:");
                gets(a);
                if(strcmp(a,man[0].name)==0)
                {man[0].nuber +=1;}
                else if(strcmp(a,man[1].name)==0)
                {man[1].nuber +=1;}
                else if(strcmp(a,man[2].name)==0)
                {man[2].nuber +=1;}
                else if(strcmp(a,man[3].name)==0)
                {man[3].nuber +=1;}       
        }
       
       
                for(i=0;i<4;i++)
                {
                        if(man[i].nuber > man[i+1].nuber)
                        {
                                max=i;
                        }
                }
        PF("排名第一的是%s,得分%d\n",man[max].name,man[max].nuber);
        for(i=0;i<3;i++)
        {
                if(i!=max)
                {

                }
        }
        PF("排名最低的是%s,得分%d\n",man[min].name,man[min].nuber);
       
}

源码删了写写了删。然后保留成这样了。我只能做到输出最多票的那个人,但理想是,可以从大到小排列输出所有人,改来改去已经被自己搞蒙圈,说不定中间其实有正确的,先留帖。说不定等会明白了。
最佳答案
2018-8-18 21:43:45
#include <stdio.h>
#include <string.h>

struct Per
{
        char name[20];
        int number;
} man[4] = {{"赵", 3}, {"钱", 1}, {"孙", 9}, {"李", 5}};


void Swap(struct Per *a, struct Per *b)
{
        struct Per tmp = *a;
        *a = *b;
        *b = tmp;
}

void Sort(struct Per data[], int len)
{
        for(int i = 0; i < len; ++i)
        {
                for(int j = i + 1; j < len; ++j)
                {
                        if(data[i].number > data[j].number)
                                Swap(&data[i], &data[j]);
                }
        }
}

int main(void)
{
        Sort(man, 4);
        for(int i = 0; i < 4; ++i)
        {
                printf("%s: %d\n", man[i].name, man[i].number);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-18 21:21:48 | 显示全部楼层
搜了下论坛,几乎都是直接输出就没管了,但是达不到心里预期很难受啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 21:24:30 | 显示全部楼层
min的值未修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 21:28:16 | 显示全部楼层

min的值,我还没有用上。最下面哪一行是前面没删除,本来想找到最大和最小的然后再去看中间的,,,是之前另一种写法用的。我现在需求的是 从大到小直接输出来所有人的名单,而不是直接全部不排序输出。我在想想,发源码的时候没整理就丢上来了,现在就缺这一步,再试试。嗯嗯,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 21:43:45 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <string.h>

struct Per
{
        char name[20];
        int number;
} man[4] = {{"赵", 3}, {"钱", 1}, {"孙", 9}, {"李", 5}};


void Swap(struct Per *a, struct Per *b)
{
        struct Per tmp = *a;
        *a = *b;
        *b = tmp;
}

void Sort(struct Per data[], int len)
{
        for(int i = 0; i < len; ++i)
        {
                for(int j = i + 1; j < len; ++j)
                {
                        if(data[i].number > data[j].number)
                                Swap(&data[i], &data[j]);
                }
        }
}

int main(void)
{
        Sort(man, 4);
        for(int i = 0; i < 4; ++i)
        {
                printf("%s: %d\n", man[i].name, man[i].number);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 21:55:40 | 显示全部楼层

谢谢大佬,我分析参考下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表