2012-09-28 24 views
0

我剛剛在學校學習Pascal,並在我的任務中遇到了一個奇怪的問題。Pascal讀入int數組

我需要做的是創建兩個數組,然後讀取第一個數組的整數,直到讀取10個數字或讀取一個負數,然後使用相同規則移至第二個數組。

我已經所有工作正常,除了在第二個數組中的第一個數字總是搞砸了。 -1似乎總是被複制到陣列2索引1

我不能放棄得多的代碼,因爲這是一個任務,但它是這樣的:

while input >= 0 and index < 10 do 
    begin 
    read(input); 
    array1[index] := input; 
     index++ 
    end; 

input:= 0; //to reset it 

another while loop but for list2... 

如果我爲數組1輸入1,2,3,-1和array2 1,2,3,4,-1我的輸出將類似於:

list 1: 1 list 2: -1 
list 1: 2 list 2: 2 
list 1: 3 list 2: 3 
list 1: -1 list 2: 4 

這是否有意義?我只需要一點幫助就能明白爲什麼會發生這種情況,我被困在這裏。

+1

你想在兩個數組或停止條件不一定讀10個整數(正面和負面的)是負數? – PiLHA

+1

我只想讀取10個正整數,並在讀取10個或讀取第一個負整數時停止。 –

+1

您*給出的代碼中沒有任何內容會導致此行爲。我唯一注意到的是,你在while循環中增加了一些「索引」,但是隨後在一些「輸入」條件下測試終止條件。順便說一句,真的有一個pascal編譯器可以編譯這些代碼嗎? –

回答

1

正如你對問題的評論指出的那樣,當幾乎可以肯定的問題出現在沒有後的代碼時,有點難以找到問題所在。話雖這麼說,但是,也有一些明顯的問題

  1. 之前的「而」循環讀出「輸入」。輸入'while'循環取決於'input'的初始值;我想你假設它的初始值是0,但它可能是一些負值的垃圾數。
  2. 'index ++'不是Pascal語法,而是C.這應該是'inc(index)'。
  3. 而不是在第一個循環之後寫'input:= 0',這應該是'index:= 0'。

我想象的代碼,第一個後「而」循環應該是

index:= 0; 
readln (input); 
while (input >= 0) and (index < 10) do 
begin 
    inc (index); 
    array2[index]:= input; 
    readln (input) // there is no need for a semicolon before 'end'! 
end; 
+1

出於興趣,你爲什麼拒絕在分號之前加分號? – Thomas

+1

有沒有必要在那裏放一個分號;分號是語句分隔符而不是語句'結論'。 –

+1

當您想要在先前的最後一個之後添加更多語句時,這不會回覆您嗎?沒有評判或任何事情,只是好奇。 – Thomas