鱼C论坛

 找回密码
 立即注册
查看: 4619|回复: 8

大家帮忙看看程序,老通不过啊!多谢啊!

[复制链接]
发表于 2012-10-13 17:12:52 | 显示全部楼层 |阅读模式

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

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

x
/*******************************************************/
/* 对候选人得票的统计成绩。                            */
/* 设有3个候选人,每次输入一个得票的候选人的名字,要求 */
/* 最后输出各人得票结果。                              */
/*******************************************************/

#include <stdio.h>
#include <string.h>

struct person   //定义结构体,并对结构体数组初始化。
{
        char name[20];
        int cout;

} leader[3] = {{"Li", 0}, {"Zhang", 0}, {"Fun", 0}};

void main()
{
        int i, j;
        char leader_name[20];

        while(1)
        {
                scanf("%s", leader_name);
               
                for(j = 0; j < 3; j++)
                {
                        if(strcmp(leader_name, leader[j].name) == 0)
                        {
                                leader[j].cout++;
                        }
                }
                if(getchar() == '*')
                {
                break;
                }
        }
        printf("\n");

        for(i = 0; i < 3; i++)
        {
                printf("%5s:%d\n", leader[i].name, leader[i].cout);
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-13 17:48:14 | 显示全部楼层
  1. /*******************************************************/
  2. /* 对候选人得票的统计成绩。 */
  3. /* 设有3个候选人,每次输入一个得票的候选人的名字,要求 */
  4. /* 最后输出各人得票结果。 */
  5. /*******************************************************/

  6. #include <stdio.h>
  7. #include <string.h>

  8. struct person //定义结构体,并对结构体数组初始化。
  9. {
  10. char name[20];
  11. int cout;

  12. } leader[3] = {{"Li", 0}, {"Zhang", 0}, {"Fun", 0}};

  13. void main()
  14. {
  15. int i, j;
  16. char leader_name[20];

  17. while(1)
  18. {
  19. scanf("%s", leader_name);

  20. for(j = 0; j < 3; j++)
  21. {
  22. if(strcmp(leader_name, leader[j].name) == 0)
  23. {
  24. leader[j].cout++;
  25. }
  26. }
  27. getchar();
  28. if(getchar() == '*')
  29. {
  30. break;
  31. }
  32. }
  33. printf("\n");

  34. for(i = 0; i < 3; i++)
  35. {
  36. printf("%5s:%d\n", leader[i].name, leader[i].cout);
  37. }
  38. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-13 18:38:02 | 显示全部楼层
你第二个getchar()每次获得了一个字符,所以你只能获取第一次输入的人的名字,比如你第一次输入了Fun,对应Fun的票数就增1,但是你第二次输入Zhang,实际上字符‘Z’被getchar()获取了,所以scanf()那里真正的只获取到了hang,如果你第二次输入要获取到Zhang,就应该在Zhang前面多数任意一个字符,比如输入hZhang。
其实像你的代码还有很多问题,比如连一点U提示I都没有,还有上面那个for循环如果匹配到相同的姓名,则对应姓名的票数增1,然后就可以跳出此循环了,没必要再继续循环。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-13 18:40:26 | 显示全部楼层
还有对于这么简单的程序,对关键变量进行监控,然后单步调试就能跟出错误所在了,编程重在于实践,一定要增强动手能力啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-13 19:19:24 | 显示全部楼层
我怎么没看懂
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-14 10:23:46 | 显示全部楼层
我是这么改的,不知对不对啊

/*******************************************************/
/* 对候选人得票的统计成绩。                            */
/* 设有3个候选人,每次输入一个得票的候选人的名字,要求 */
/* 最后输出各人得票结果。                              */
/*******************************************************/

#include <stdio.h>
#include <string.h>

struct person   //定义结构体,并对结构体数组初始化。
{
         char name[20];
         int cout;

} ;

void main()
{
         int i, j;
         struct person leader[3] = {{"li", 0}, {"zhang", 0}, {"fun", 0}};
         char leader_name[20];

        while(1)
         {
                 puts("请输入候选人的姓名");
                 scanf("%s", leader_name);

                for(j = 0; j < 3; j++)
                 {
                         if(strcmp(leader_name, leader[j].name) == 0)
                         {
                                 leader[j].cout++;
                                // printf("%d",leader[j].cout);
                         }
                 }
                 getchar();
                 puts("输入*则结束输入,否则继续输入候选人姓名");
                 if(getchar() == '*')
                 {
                 break;
                 }
                 fflush(stdin);
         }
         printf("\n");

        for(i = 0; i < 3; i++)
         {
                 printf("%5s:%d\n", leader[i].name, leader[i].cout);
         }
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-10-14 10:36:37 | 显示全部楼层
感谢大家的回帖啊!其实只是缺少了一个刷新程序,getchar()的输入是缓存区的东西!加个刷新就ok
了啊!;P
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-10-14 10:38:50 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-10-14 10:41:42 | 显示全部楼层
飘香夜梦 发表于 2012-10-13 18:38
你第二个getchar()每次获得了一个字符,所以你只能获取第一次输入的人的名字,比如你第一次输入了Fun,对应 ...

多谢啊!学习了啊!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-2-10 19:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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