2020.12.27输入某值打印对应值数的“*”号

1.下面程序的功能是读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
找出其中的错误,并改正之。
原错误程序:

#include "stdio.h"
main()
{   int i,a,n=1;
    while(n<=7)
    {   
        do
        {   
            scanf("%d",a);  //缺少取地址符;        
        }while(a<1 && a>50);//逻辑关系不对,
                            //导致无论输入何值都能输出结果    
        for(i=1;i<=a;i++)
            printf("*");
        printf("\n");
        n++;
    }
}

该源程序是可以通过编译的,但是无法显示任何输出结果
很明显,在scanf处没有加入取地址符&,导致a初始值是一个巨大的数,因此该循环体一次也无法执行。但是加入取地址符后会发现,无论输入多大的数,都可以执行输出星号这个操作,与题意不符,观察执行while循环体的条件while(a<1 && a>50),如果输入51,该条件表示为“51大于50且小于1”,明显不符合逻辑;把且&&改成或||即可符合逻辑。
改错结果如下:

#include "stdio.h"
main()
{   int i,a,n=1;//a为输入的值,n为数据个数统计器;
    while(n<=7)//当输入的数据个数在7以内,可执行该循环体;
    {   
        do
        {   
            scanf("%d",&a);          
        }while(a<1 || a>50);//当输入错误数据,则无法打印*号;
        for(i=1;i<=a;i++)   //反之执行打印*操作;
            printf("*");
        printf("\n");
        n++;//当n累积到7循环结束,输出结果。
    }
}

在这里插入图片描述
但是该程序居然没有输入错误程序的提示。。。
因此我打算修改程序:当输入错误数据时,系统会给出错误提示,并且将要求当用户输入正确数值为止方可继续循环。
魔改程序如下:

#include "stdio.h"
main()
{   int i,a,n=1;
    while(n<=7)
    {
    	scanf("%d",&a); 
    	while(a<1||a>50)//判断输入的a是否符合要求;
    	{	
    		printf("Error! Please reput data (1<=x<=50)!\n");
    		scanf("%d",&a);
    	}//当且仅当a符合要求时,程序才会执行下一步打印*号操作;
        for(i=1;i<=a;i++)
            printf("*");
        printf("\n");
        n++;
    }
}

在这里插入图片描述
peace.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值