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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241483.html
標籤:其他
上一篇:Springcloud專案向RabbitMQ訊息中間件發送資訊(RabbitMQ安裝在虛擬機)
下一篇:MongoDB基礎操作
