38 用break和continue改变流程 课后

项目一

代码:

/*计分器扩展版*/
#include <stdio.h>
#define n 10
int main()
{
    double a,sum,max,min,b;
    char c;
    int i;
    do
    {
        sum=0;
        max=-1;
        min=11;
        i=1;
        do
        {
            printf("请输入第%d位评委的打分",i);
            b=scanf("%lf",&a);
            if(b==0)
            {
                printf("非法字符,请输入0-10之间的数\n");
                rewind(stdin);//重新指向键盘缓冲区开头,或者用fseek(stdin,0L,2)和while ( (c = getchar()) != '\n' && c != EOF)或者fflush(stdin)也是可以的
                continue;
                }
            else if(a>=0&&a<=10)
            {
                sum=sum+a;
                if(a>max)
                    max=a;
                if(a<min)
                    min=a;

            }
            else
               {
                printf("输入错误!请重新输入\n");
                continue;
                }
                i++;
        }while(i<=10);

        printf("评委给出的最高分为%f\n",max);
        printf("评委给出的最低分为%f\n",min);
        printf("减去一个最高分%f,减去一个最低分%f\n",max,min);
        printf("该选手最后的总得分为%f\n",sum-max-min);
        printf("该选手最后的平均分为%f\n",(sum-max-min)/(n-2));
        printf("该选手的成绩统计完毕,退出请按N,继续统计下一位请按任意键……………\n");
        fflush(stdin);
        c=getchar();
    }while(c!='n'&&c!='N');
    return 0;
}
查阅了很多相关资料,这里用了一个利用scanf返回值来判断输入的是否是非法字符的方法,当输入不符合scanf输出格式的字符时候,scanf返回值为错误的那个减一,反之为正确输入并赋值的个数,我们可以判断其返回值来判定我们输入的字符是否是我们我们需要的格式


项目二

代码:

/*打豆豆*/
#include <stdio.h>
#define n 10
int main()
{
    char a;
    do
    {
        printf("* 1. 吃饭\n");
        printf("* 2. 睡觉\n");
        printf("* 3. 打豆豆\n");
        printf("* 0. 退出\n");
        printf("* 请选择(0-3):");
        rewind(stdin);//这句是防止第二次循环a的值被缓冲区其他数据赋值
        scanf("%c",&a);
        if(a=='0')
            {
                printf("哎啊!我撤退!\n");break;
            }
       else switch(a)
        {
        case '1':
            printf("我饿,我吃我吃我吃吃吃!\n");break;
        case '2':
            printf("我困,我睡我睡我睡睡睡!\n");break;
        case '3':
            printf("我烦,我打我打我打打打!\n");break;
        default:
            printf("笨蛋!输入错误,重新输入\n");
        }
    }while(1);
    return 0;
}
这题因为我们要在输入0的时候跳出整个程序,所以我们单独处理,这里要注意,break不对if-else语句起作用,它会跳出包含if语句的这个循环,只跳出一层循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值