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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章