| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2235 人关注过本帖
标题:二次键入的一点问题
只看楼主 加入收藏
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
结帖率:96.15%
收藏
已结贴  问题点数:10 回复次数:20 
二次键入的一点问题
这个程序是要先输入一串整数,再通过swtich函数输入选项,得出结果。然而我这个程序输完第一次就不能输第二次了,烦请指教下。
#include <stdio.h>
#include<ctype.h>
int main(void)
{
    int n_odd = 0;
    int n_even = 0;
    int av_odd, sum_odd, av_even, sum_even, c;
    char ch;
   
    printf("输入一串整数: \n");
    while((scanf("%d", &c))
    {
        if(c%2==0)
        {
            n_even++;
            sum_even += n_even;
        }
        if(c%2==1)
        {
            n_odd++;
            sum_odd += n_odd;
        }
        if(c=='#')
            break;
    }
        av_odd = sum_odd / n_odd;
        av_even = sum_even / n_even;
    printf("数字键入结束后请从ABCD中选出一个选项,\n");
    printf("选A则输出奇数的平均数值; ");
    printf("选B则输出奇数的总和值; ");
    printf("选C则输出偶数的平均数值; ");
    printf("选D则输出偶数的总和值; \n");
    while((ch = getchar()) != '#')
    {
        if('\n' == ch)
            continue;
        
    if(isupper(ch))
    switch(ch)
        {
                case 'A':
                printf("奇数的平均数是%d\n", av_odd);
                break;
                case 'B':
                printf("奇数的总和是%d\n", sum_odd);
                break;
                case 'C':
                printf("偶数的平均数是%d\n", av_even);
                break;
                case 'D':
                printf("偶数的总和是%d\n", sum_even);
                default:
                printf("Done!\n");
        }
        
    }
    return 0;
}
搜索更多相关主题的帖子: include 
2016-08-22 14:51
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:2 
av_odd = sum_odd / n_odd;    //除数有可能是0
 av_even = sum_even / n_even;    ////除数有可能是0
sum_odd  //    没有初始化
sum_even    //    没有初始化

[此贴子已经被作者于2016-8-22 15:15编辑过]

2016-08-22 15:02
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:2 
if(c%2==0)
        {
            n_even++;
            sum_even += n_even;   //这个地方是+c还是+n_even?
        }
        if(c%2==1)
        {
            n_odd++;
            sum_odd += n_odd;   //同理,是加奇偶数的个数还是加你输入的c值呢?
2016-08-22 15:14
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:2 
  if(c=='#')
             break;
c是不可能等于#号的,这句没用
if('\n' == ch)
             continue;这句也没什么用吧
因为有if(isupper(ch))
2016-08-22 15:52
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 2楼 linlulu001
这个除数是0好像没关系,我之前做了这道题的变形题,也用的这个等式,假如除数为0,结果也显示为0.
2016-08-22 16:38
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 3楼 wanglianyi1
下一个swtich函数里说了,是数值的总和
2016-08-22 16:40
Eahonxu
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2016-7-13
收藏
得分:0 
回复 4楼 ehszt
我想解决的是,当我输入一串数字之后按回车,程序完全不动,只有在输入#号才会跳出后面的选项,接着程序就结束了。
2016-08-22 16:44
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 Eahonxu
我知道你要算的总和,看你的_sum,但是你加的数对不对?你的n_even和n_odd表示是什么数?不是计算的奇偶数的个数?如果是,那么你的_sum为什么加的不是你输出的每一位的奇偶数,为什么加的是数字的个数?看你求平均值的除数位置,你还不明白我说什么意思?

[此贴子已经被作者于2016-8-22 16:59编辑过]

2016-08-22 16:57
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 Eahonxu
楼上说的都对呀,你确实是错了。
另外
while((scanf("%d", &c))
少一个右括号
还有不止输入#号,输入任何一个字母都会退出
2016-08-22 16:57
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 


程序代码:
 while((scanf("%d", &c))//scanf()函数会返回一个数值,表示本次读数据读到多少个有效数据。所以你必须输入一个不是数字的符号进去他才能while(0)跳出循环,否则就算你回车了无数回
                //他都会 在那里等着,等着你给数据
    {
        if(c%2==0)
        {
            n_even++;
            sum_even += n_even;
        }
        if(c%2==1)
        {
            n_odd++;
            sum_odd += n_odd;
        }
        if(c=='#')
            break;
    }





φ(゜▽゜*)♪
2016-08-22 18:35
快速回复:二次键入的一点问题
数据加载中...
 
   



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

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