2015-10-23 37 views
1

我的程序應該允許用戶選擇從菜單冰淇淋然後添加價格爲冰淇淋展示冰cream.However我的總價輸出是錯誤的總價。例如,如果我選擇1和2,答案應該是1.5 + 1.7 = 3.2,但是我得到3.4。另外,如果我選擇2我只會得到錯誤。請幫幫我。價格在菜單+總價(帕斯卡)

program iceCream; 

var 
    count,i: integer; 
    price:array[1..50]of real; 
    totalPrice: real; 
    choice: integer; 

begin 
    count:= 0; 

    writeln (' ICE CREAM FLAVOUR'); 
    write (' 1.Vanilla: RM 1.50 | 3.Chocolate: RM 2.00'); 
    writeln; 
    write (' 2. Strawberry: RM 1.70 | 0. Exit '); 
    writeln; 

    repeat 
    write (' Enter your choice(number): '); 
    readln (choice); 
    if choice <= 3 then 
     count:= count+1 
    else 
     writeln ('Invalid choice'); 

    case choice of 

     1: begin 
      price[i]:= 1.50; 
     end; 

     2: begin 
      price[i]:= 1.70 ; 
     end; 

     3: begin 
      price[i]:= 2.00; 
     end; 

    end; 

    for i:= 1 to count do 
    begin 
     totalPrice:= totalPrice+price[i]; 
    end; 

    until choice = 0; 

    writeln (' Total ice-cream: ', count); 
    readln; 
    writeln (' Total price: RM ', totalPrice:2:2); 
    readln; 

end. 

回答

1

我不會在這裏回答你的問題。找出自己做錯的更重要,並且如何解決自己的問題

如何找出什麼錯誤?

編譯器顯示了兩個警告,當它編譯代碼:

警告:2

project1.lpr(29,17)警告:變量 「i」 似乎並不初始化

project1.lpr(44,25)警告:變量totalPrice似乎沒有被初始化

這種警告時,你不必分配給它的值讀取變量出現。編譯器會將您引導至不安全代碼的位置。第一個警告位於行29列17:

1: begin 
    price[i]:= 1.50; // i has not been set before. So its value is undefined or 0 
    end; 

是您打算使用設置Price[i]這裏?那麼,爲什麼之前沒有將它分配到價值? 或者你有一個不同的變量,包含冰淇淋的數量?你爲什麼不使用它?

讓我們來看看第二預警線44列25.它的這一行:

totalPrice:= totalPrice+price[i];  
//   ^ 

確定totalPrice已經正確初始化?

即使你初始化它正確的程序可能仍然無法正常工作。在這種情況下,它有助於調試該應用程序。 在Lazarus IDE中打開您的應用程序,然後按F8即可瀏覽您的程序。你在執行你的程序期間,從一行到另一行。那麼你會看到什麼是錯的。