谭浩强书上的这个题目有问题吗?大家看看,我的电脑运行没有结果!!!急急急急!!!

xfr_1982 2008-05-28 12:54:52
题目:
对候选人得票的统计程序,设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出个人的得票结果。
【大家看程序有问题吗??怎么下面的程序结果出来都是
li:0
zhang:0
wang:0
呢????谢谢您的指教】

#include <string.h>
struct person
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Wang",0};
main()
{ int i,j;
char leader_name[20];
for(i=1;i<=10;i++)
{
scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}
...全文
213 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qizhi0119 2008-05-29
  • 打赏
  • 举报
回复
,大小写明感.注意这个就行了.
athrunzalatt 2008-05-29
  • 打赏
  • 举报
回复
输入就有结果
baihacker 2008-05-28
  • 打赏
  • 举报
回复
Li
Zhang
Wang
Li
Zhang
Wang
Li
Zhang
Wang
Li
Li:4
Zhang:3
Wang:3
Press any key to continue
arong1234 2008-05-28
  • 打赏
  • 举报
回复
从楼主的代码看,不见得有错,但是style不好,也没有啥面向对象,实在是有点落后。谭老的书适合我们那个年代的,不适合你们了,也许你们该去买买C++ prime之类的书看看。

楼上有用TC的,建议赶快换吧,用一个被淘汰的被遗弃的编译器自讨苦吃

还有#include <stdio.h>的问题,不要因为某个编译器不要你加就不加,你的代码应该能适应不同的编译器,不要只为一个编译器写程序

[Quote=引用 15 楼 lily2005lucky 的回复:]
lz,建议看看更经典的C教程,
潭爷爷的书似乎更加针对二级,
如果你对C确实有兴趣的话,看看国外的书!
以上纯属经验之谈!
[/Quote]
lily2005lucky 2008-05-28
  • 打赏
  • 举报
回复
lz,建议看看更经典的C教程,
潭爷爷的书似乎更加针对二级,
如果你对C确实有兴趣的话,看看国外的书!
以上纯属经验之谈!
a7390120 2008-05-28
  • 打赏
  • 举报
回复
整个程序没有调用匹配的内置的函数库,头文件首先肯定会导入#include<stdio.h>
  • 打赏
  • 举报
回复
输入:Li Li Li Wang Zhang Zhang Wang x y z a
输出:
Li:3
Zhang:2
Wang:2
结果应该没问题,程序也没什么问题,不过最好是加上#include <stdio.h>
  • 打赏
  • 举报
回复
我在unix下给你跑了一遍,不需加#include <stdio.h>也能编译成功;
输入:
Li 2 Zhang 1 Wang 5
a b c
d
输出:
Li:1
Zhang:1
Wang:1

XiaoG602 2008-05-28
  • 打赏
  • 举报
回复
平台问题……
gaofanfan 2008-05-28
  • 打赏
  • 举报
回复
这是c语言,对于用了标准库函数scanf()和printf()。必须加上#include "stdio.h".否则会出现错误的。
bysdy 2008-05-28
  • 打赏
  • 举报
回复

#include<stdio.h>
#include <string.h>
struct person
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Wang",0};
main()
{ int i,j;
char leader_name[20];
for(i=1;i <=10;i++)
{
scanf("%s",leader_name);
leader_name[0]&=0xDF;//把首字母小写转化成大写,大写则不变
for(j=0;j <3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i <3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}

奇怪刚刚怎么没贴上那~~~
bysdy 2008-05-28
  • 打赏
  • 举报
回复
应该是楼主打成li zhang wang了把,
而你一开始定义的是
struct person 
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Wang",0};

不过可以这样

for(i=1;i <=10;i++)
{
scanf("%s",leader_name);
leader_name[0]&=0xDF;//把小写的首字母转换成大写,而大写的不变
for(j=0;j <3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}

这样就没关系是大写或是小写了啦~~~
icansaymyabc 2008-05-28
  • 打赏
  • 举报
回复

#include <string.h>
struct person
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Wang",0};
main()
{ int i,j,f;
char leader_name[20];
for(i=1;i <=10;i++)
{
scanf("%s",leader_name);

f = 0;

for(j=0;j <3;j++)
{
if(strcmp(leader_name,leader[j].name)==0)
{
leader[j].count++;
f = 1;
}
}
if(f == 0) printf("输入的‘%s’不在候选人名单里!请重新输入\n",leader_name);
//改成这样,输错时就能得到提示,你就不会迷糊了。
}
for(i=0;i <3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
}

icansaymyabc 2008-05-28
  • 打赏
  • 举报
回复
程序没错!
估计你输入的是: li , zhang ,wang 吧?
注意区分大小写,必须输入 Li ,Zhang ,Wang 之一!
还有,输入名称的前后别添加多余的空格。
visame 2008-05-28
  • 打赏
  • 举报
回复
程序应该没有错误。除了头文件有一点点问题。
ming470612141 2008-05-28
  • 打赏
  • 举报
回复
我在WIN-TC下运行程序,不需加#include<stdio.h>也是对的

输入:
Li
Li
Li
Li
Zhang
Zhang
Zhang
Wang
Wang
Wang

输出:
Li:4
Zhang:3
wang:3
baihacker 2008-05-28
  • 打赏
  • 举报
回复
我只是在VC的情况下加了一个
#include <stdio.h>
xfr_1982 2008-05-28
  • 打赏
  • 举报
回复
不会吧?我怎么不是你这个结果呢???你对我的程序改动了吗???谢谢!!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧