2014-03-05 64 views
0

首先,我是編程新手,剛開始學習pascal。我遇到了錯誤85:「;」預期。我搜遍了整個事情多次,但我一直無法找到問題。有什麼建議麼?Pascal語法錯誤85

下面的代碼:

program test; 
var 
    a,b,c:real; 
begin 
    D:=sqr(b)-4*a*c; 
    writeln('Enter a value for a'); 
    readln(a); 
    writeln('Enter a value for b'); 
    readln(b); 
    writeln('Enter a value for c'); 
    readln(c); 
    if (D<0) then 
    begin 
    writeln('There is no solution.'); 
    else 
    if (D>0) then 
    begin 
    x1:=(-b+sqrt(D))/2*a; 
    x2:=(-b-sqrt(D))/2*a; 
    writeln('x1 is:'); 
    writeln('x1:=',x1); 
    writeln(x2 is:); 
    writeln('x2:=',x2); 
    end; 
end. 
+2

你沒收到對發生錯誤的行號?另外,縮進你的代碼。 – Michael

+0

沒有。它只顯示錯誤85.儘管如此,感謝您的意見和建議縮進我的代碼。我會在未來更頻繁地嘗試。 – user3385057

回答

3

你有三個begin,只有兩個end語句。縮進你的代碼,你會注意到你的錯誤。變量D,X1和X2也是未定義的。您的輸出中還有其他語法錯誤,即在末尾的writeln語句之一中丟失了標記'

+0

謝謝你糾正我。我將在未來嘗試縮進我的代碼,並且仔細檢查它是否有任何msitakes。 – user3385057

+0

但是,該錯誤消息具有誤導性。 – jwdietrich

+0

是的,這是誤導。它是由'writeln('沒有解決方案')'末尾的分號引起的;'代碼行。如果編譯器輸出'「else語句之前的語句中刪除分號」'會更好。在Pascal中,如果有'else',那麼在前面的語句中就不會有分號。 –

0

,你需要一個end前的其他..

program test; 
var 
    a,b,c:real; 
begin 
    D:=sqr(b)-4*a*c; 
    writeln('Enter a value for a'); 
    readln(a); 
    writeln('Enter a value for b'); 
    readln(b); 
    writeln('Enter a value for c'); 
    readln(c); 
    if (D<0) then 
    begin 
    writeln('There is no solution.'); 
    end 
    else 
    if (D>0) then 
    begin 
    x1:=(-b+sqrt(D))/2*a; 
    x2:=(-b-sqrt(D))/2*a; 
    writeln('x1 is:'); 
    writeln('x1:=',x1); 
    writeln(x2 is:); 
    writeln('x2:=',x2); 
    end; 
end.