注册 登录
编程论坛 C++教室

帮我看下这个有什么问题?

jwh039 发布于 2012-03-21 14:45, 403 次点击
我是一名新的不能再新的新手,刚接触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;
总是不执行。
当输完一个数后就直接显示结果,然后就提示要在输入一个数字。
上面的直接不执行。
怎么回事啊?
高人帮忙看一下。
2 回复
#2
榴紫丫2012-03-21 15:42
scanf("%c",&choice);
你这个是输入字符的,应输入字符串Yes or No, 来判知吧
把 %c 改为  %s  就可以了吧

[ 本帖最后由 榴紫丫 于 2012-3-21 15:47 编辑 ]
#3
Caesoiar2012-03-21 21:05
原因是你上面这一句:
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 编辑 ]
1