标题:帮我看下这个有什么问题?
只看楼主
jwh039
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-21
结帖率:0
已结贴  问题点数:20 回复次数:2 
帮我看下这个有什么问题?
我是一名新的不能再新的新手,刚接触C没多长时间,老湿布置了一篇作业,求1!+2!+3!+……+n!,然后就写了一段代码,如下:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    long number=0L;
    long sum=0L;
    long k=0L;
    char choice=0;
   
    for( ; ;)
    {
        printf("请输入阶乘上限:");
        scanf("%ld",&number);

        for(long i=1;i<=number;)
        {
            k=1L;
            for(long j=1L;j<=i;)
            {
                k=k*j;
                ++j;
            }
            sum+=k;
            ++i;
        }
        printf("%ld",sum);

        printf("想再试试其它的数吗?请输入Y或N:");
        scanf("%c",&choice);
        choice=toupper(choice);

        if(choice=='N')
            break;
    }
   
    return 0;
}

但是里面的这个:
printf("想再试试其它的数吗?请输入Y或N:");
        scanf("%c",&choice);
        choice=toupper(choice);

        if(choice=='N')
            break;
总是不执行。
当输完一个数后就直接显示结果,然后就提示要在输入一个数字。
上面的直接不执行。
怎么回事啊?
高人帮忙看一下。
搜索更多相关主题的帖子: long include number choice 
2012-03-21 14:45
榴紫丫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:33
专家分:135
注 册:2011-11-3
得分:10 
scanf("%c",&choice);
你这个是输入字符的,应输入字符串Yes or No, 来判知吧
把 %c 改为  %s  就可以了吧

[ 本帖最后由 榴紫丫 于 2012-3-21 15:47 编辑 ]
2012-03-21 15:42
Caesoiar
Rank: 2
等 级:论坛游民
帖 子:19
专家分:42
注 册:2012-3-19
得分:10 
原因是你上面这一句:
scanf("%ld",&number);
输入完后按了一次回车,就产生了一个'\n'字符,它一直停留在输入队列中,在下面
scanf("%c",&choice);
的时候实际优先读取了回车字符'\n'。
可以先“吃掉”'\n',代码如下:
程序代码:
...
printf("想再试试其它的数吗?请输入Y或N:");
scanf("%c",&choice);    // 吃掉'\n'
scanf("%c",&choice);    // 有效输入
choice=toupper(choice);
...


[ 本帖最后由 Caesoiar 于 2012-3-22 11:31 编辑 ]
2012-03-21 21:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-363857-1-1.html




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

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