C语言新手日记1:使用do.....while做人机交互遇到的麻烦(包含函数模块化求素数)

包含函数模块化求素数,代码使用率更高

使用do…while做人机交互遇到的麻烦

新手日记1:使用do…while循环制作人机交互(输入y再次执行程序,输入n结束并退出)

遇到的麻烦:在输入y字符后,do…while循环不进行循环,直接退出

/*
  2019年11月30日23:02:35
  使用函数模块化将判断素数的指令分开进行自定义函数
  使函数更加高效使用;
  Mading in JiuFen;
*/
#include<stdio.h>
#include<stdbool.h>
bool Isprime(int val);  //求该数字是不是一个素数
int Traverseval(int val1);  //求2到该区间有多少个素数,并且统计个数并且输出全部素数
int main()
{
    int ival;
    int rc;
    char  pd;
    do
    {
        printf("进入程序,该程序有两个功能\n");
        printf("输入1选择功能一:输入一个数字,系统对其进行素数判定\n");
        printf("输入1选择功能一:输入一个数字,系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
        scanf("%d",&rc);

        switch(rc)
        {
            case 1:
                printf("请输入一个数字:系统对其进行素数判定\n");
                scanf("%d",&ival);
                if(Isprime(ival))

                    printf("Yes!\n");
                else
                    printf("NO!\n");

                break;
             case 2:
                printf("请输入一个数字:系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
                scanf("%d",&ival);
                Traverseval(ival);
                break;
             default:
                printf("WARNING : 你输入错误,系统停止,请按照说明从新输出!!!!\n");
        }
            printf("使用继续使用,如果使用,输入Y/y,退出N\n");
           //或使用scanf("%c",&pd);
           pd = getchar();
    }while(pd == 'Y' || pd == 'y');

    return 0;
}
bool Isprime(int val)
{
    int i;
    for(i = 2;i<val;i++)
    {
        if(val % i == 0)
            break;
    }
    if(val == i)
        return true;
    else
        return false;
}
int Traverseval(int n)
{
    int i;
    int count = 0;
    for(i = 2;i<= n;i++)
    {
        if(Isprime(i))
        {
            printf("%d\n",i);
            count++;
        }

    }
    printf("该区间内总计素数个数为%d\n",count);
}

使用上述代码do…while 都无法进行正常循环

发现,输入的scanf在接收键盘时,需要在scanf(" %c",&pd)中的%c前边加上一个空格,此时代码即可正常运行,do…while生效

或者采用

getchar();
pd = getchar();

此时代码即也可正常运行,do…while生效

对其猜测,可能在输入前需要接受一个回车,才可以正常输入y或者n,否则,scanf会接收一个回车输入,导致程序判定失败,无法正常循环。

下列附上正确代码

/*
  2019年11月30日23:02:35
  使用函数模块化将判断素数的指令分开进行自定义函数
  使函数更加高效使用;
  Mading in Mr.JiuFen;
*/
#include<stdio.h>
#include<stdbool.h>
bool Isprime(int val);  //求该数字是不是一个素数
int Traverseval(int val1);  //求2到该区间有多少个素数,并且统计个数并且输出全部素数
int main()
{
    int ival;
    int rc;
    char  pd;
    do
    {
        printf("进入程序,该程序有两个功能\n");
        printf("输入1选择功能一:输入一个数字,系统对其进行素数判定\n");
        printf("输入1选择功能一:输入一个数字,系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
        scanf("%d",&rc);

        switch(rc)
        {
            case 1:
                printf("请输入一个数字:系统对其进行素数判定\n");
                scanf("%d",&ival);
                if(Isprime(ival))

                    printf("Yes!\n");
                else
                    printf("NO!\n");

                break;
             case 2:
                printf("请输入一个数字:系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
                scanf("%d",&ival);
                Traverseval(ival);
                break;
             default:
                printf("WARNING : 你输入错误,系统停止,请按照说明从新输出!!!!\n");
        }
            printf("使用继续使用,如果使用,输入Y/y,退出N\n");
            scanf(" %c",&pd);   //注意%c前有一个空格
           //getchar();
           //pd = getchar();
    }while(pd == 'Y' || pd == 'y');

    return 0;
}
bool Isprime(int val)
{
    int i;
    for(i = 2;i<val;i++)
    {
        if(val % i == 0)
            break;
    }
    if(val == i)
        return true;
    else
        return false;
}
int Traverseval(int n)
{
    int i;
    int count = 0;
    for(i = 2;i<= n;i++)
    {
        if(Isprime(i))
        {
            printf("%d\n",i);
            count++;
        }

    }
    printf("该区间内总计素数个数为%d\n",count);
}

谢谢大家!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值