| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4445 人关注过本帖
标题:统计元音字母出现次数 看不出哪里错了
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这么简单个问题聊出3篇了也没个结果。楼主也是,你把原题描述发上来,光看代码怎么知道你哪里不符合要求。

重剑无锋,大巧不工
2016-01-25 10:14
我会发光i
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-25
收藏
得分:0 
回复 2楼 窗前的茶
while是循环语句- -
2016-01-25 18:29
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
收藏
得分:0 
回复 26楼 beyondyf
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-01-25 18:43
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
收藏
得分:0 
回复 26楼 beyondyf
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-01-25 18:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
这多明了。
1、你对数据组的理解错误,那句scanf是跟别人学来的吧,在这里不是这么用法。
2、数据读取错误。getchar估计你是为了滤掉n后的换行符,但不该每读一行都来这么一下子。
3、输出格式错误。题里着重强调了“最后一块输出后面没有空行。
下面代码是在你原代码基础上改的
程序代码:
#include<stdio.h>

 #include<string.h>

 int main()

 {

     int n,t,a,e,i,o,u,m;
     char p[500];
     scanf("%d\n", &n);
     while(n--)
     {
         gets(p);
         t=strlen(p);
         a=e=i=o=u=0;
         for(m=0;m<t;m++)
         {
             if(p[m]=='a')
               a++;
             if(p[m]=='e')
               e++;
             if(p[m]=='i')
               i++;
             if(p[m]=='o')
               o++;
             if(p[m]=='u')
               u++;
         }
         printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",a,e,i,o,u);
         if(n > 0) printf("\n");
     }
     return 0;

 }

再来一段另一个思路予你借鉴
程序代码:
 #include<stdio.h>

 int main()

 {
     char s[128], c[128] = {0};
     int n, i;
     for(scanf("%d\n", &n); n--;)
     {
         c['a'] = c['e'] = c['i'] = c['o'] = c['u'] = 0;
         for(gets(s), i = 0; s[i]; c[s[i++]]++);
         printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n", c['a'], c['e'], c['i'], c['o'], c['u']);
         if(n) puts("");
     }
     return 0;

 }

 

匆忙写的,也没时间测试,欢迎指错。

重剑无锋,大巧不工
2016-01-25 20:39
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
我也来献下丑啊,不知道能否通过测试!
程序代码:
#include <stdio.h>
void main()
{
    int i,j,n,b[5];
    char a[100],*p="aeiou";
    for(n=0,scanf("%d",&n);n;n--)
    {
        setbuf(stdin, NULL);  //清空键盘缓冲区
        for(i=0;i<5;i++)b[i]=0;
        gets(a);
        for(i=0;a[i];i++)
        {
            for(j=0;p[j];j++)
                if(a[i]==p[j]||a[i]==p[j]-32)b[j]++; //大小写都判断
        }
        for(i=0;p[i];i++)printf("%c:%d\n",p[i],b[i]);
        if(n>1)printf("\n");  //确保每个中间空一行,最后一个结果不空行
    }
}
2016-01-25 20:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 31楼 拉链
你不了解acm。

重剑无锋,大巧不工
2016-01-25 21:44
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 33楼 zlz66668888
好在哪?说来听听。

重剑无锋,大巧不工
2016-01-25 23:11
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
回复 32楼 beyondyf
还望多多指教!
另:for(n=0,scanf("%d",&n);n;n--)应修改为for(n=0,scanf("%d",&n);n>0;n--),防止人为输入了负数,循环不止。
2016-01-25 23:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这就是我说你不了解acm的原因。

OJ的数据不是由人坐在电脑前通过键盘敲进去的,而是由OJ系统调用相应的数据文件实现的。数据的可靠性不需要质疑(如果数据有问题那是系统的事,是要被鄙视的)。

标准流是一个概念,一般情况下输入流默认是键盘,但从没有规定它只能是键盘。所以你清空缓冲区的做法只适用于人机交互,而对于OJ系统这会直接清空之后所有的输入数据,能不出错么?

还见有人为测试时如何终止输入而纠结,按C-c还是C-z等等。实际的软件测试如果都是这么来那运维人员会累死。将测试数据保存到文件,然后重定向到输入流即可。这是这类简单问题的测试方法。实际的软件测试会通过测试脚本来验证相关模块的行为。

重剑无锋,大巧不工
2016-01-26 11:15
快速回复:统计元音字母出现次数 看不出哪里错了
数据加载中...
 
   



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

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