| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:请帮忙看下,为什么返回值不正确。
只看楼主 加入收藏
ignis
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-12-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
请帮忙看下,为什么返回值不正确。
题目描述:
设有代号为’a’,’b’,’c’的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。 请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同,则显示“对该两位候选人重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军!”。

程序代码:
#include<stdio.h>
#include<string.h>
    int i,j,n,a,b,c,err;
    char sh[10];
    char can[20][10]; //can is short for candidate
int vote(num){
    
        ERROR2:
        a=0;b=0;c=0;
    for(j=1;j<num+1;j++){
        printf("请输入第%d个人的投票:",j);        
        if(j==1)    fflush(stdin);    //getchar(); 在goto上来后效果不好
        ERROR1:                
        gets(sh);    
        if(sh[0]!='a'&&sh[0]!='b'&&sh[0]!='c'\
         ||sh[1]!='a'&&sh[1]!='b'&&sh[1]!='c'\
         ||sh[2]!='a'&&sh[2]!='b'&&sh[2]!='c'){
            printf("第%d个人的投票有误,请重新输入:");
            goto ERROR1;    
        }    
        if(sh[0]==sh[1]||sh[0]==sh[2]||sh[1]==sh[2]){
            printf("第%d个人的投票有误,请重新输入:");

            goto ERROR1;    
        }    
//printf("%c",sh[3]);
        strcpy(can[j],sh);                    
    }
        
    for(j=1;j<num+1;j++)        puts(can[j]);
    for(j=1;j<num+1;j++){
            //------计算a得分------ 
            if(can[j][0]=='a') a=a+5;
            if(can[j][1]=='a') a=a+3;
            if(can[j][2]=='a') a=a+2;
            //------计算b得分------ 
            if(can[j][0]=='b') b=b+5;
            if(can[j][1]=='b') b=b+3;
            if(can[j][2]=='b') b=b+2;
            //------计算c得分------    
            if(can[j][0]=='c') c=c+5;
            if(can[j][1]=='c') c=c+3;
            if(can[j][2]=='c') c=c+2;    
        }
    
        printf("a=%d,b=%d,c=%d\n",a,b,c);
        if(a>b&&a>c)    printf("恭喜a当选冠军!\n");
        if(b>a&&b>c)    printf("恭喜b当选冠军!\n");
        if(c>b&&c>a)    printf("恭喜c当选冠军!\n");

    
    if(a==b&&b==c&&a==c){
        printf("三者得分完全相同,将重新投票。\n");
        fflush(stdin); 
        goto ERROR2;
        
    if(a==b&&a>c) err=11;    //a、b得票相同且高于c 
    if(a==c&&a>b) err=13;    //a、c得票相同且高于b 
    if(b==c&&a>b) err=23;    //b、c得票相同且高于a 
        
    return err;    
        
    }
        
} 
int main(){

    printf("一共多少人投票?\n");
    ERROR3:
    scanf("%d",&n);    
    if(n<1||n>21){
        printf("你输入的数据不合法,请重新输入:");
        fflush(stdin); 
        goto ERROR3;
    }
    err=vote(n);
    printf("%d\n",err);
    
    
    
return 0;
} 


代码还没写完,我知道写的不好。
我希望通过自定义函数返回的错误ID(err的值)判断abc中有哪两个数是相等的,但是返回的值总是等于a的值。
比如输入2
在输入abc
在输入bac
返回的值是8而不是11。
请指教。
2015-12-12 13:47
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:20 
一个简单的例子,其它自己思考修改吧。

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main()
{
    int i, ret;
    int score[3] = {0};
    char s[3];

    printf("请输入A B C的投票,例入a b c\n");
    for(i = 0; i < 3; i++)
    {
        ret = scanf("%[abc] %[abc] %[abc]", &s[0], &s[1], &s[2]);
        
        fflush(stdin);
        if(ret == 3) //其它判断自己加
        {
            score[s[0] - 'a'] += 5; //进行统计
            score[s[1] - 'a'] += 3;
            score[s[2] - 'a'] += 2;
        }
        else
        {
            printf("%d个投票无效.\n", i+1);
        }
    }

    printf("足球先生A得票:%d\n", score[0]);
    printf("足球先生B得票:%d\n", score[1]);
    printf("足球先生C得票:%d\n", score[2]);
    return 0;
}
2015-12-12 17:10
快速回复:请帮忙看下,为什么返回值不正确。
数据加载中...
 
   



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

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