2016-08-15 17 views

回答

1

由於@DavidHeffernan評價,並作爲@lurker解釋,你的代碼將無法正常工作,是。

假設你有一個知道單位ClassesTStringList類型(我想最近所有的人做)一FreePascal的版本,你可以做到以下幾點:

uses 
    Classes, SysUtils; 

procedure Test; 
var 
    a, c: Char; 
    b, d: Longint; 
    s: string; 
    sl: TStringList; 
begin 
    sl := TStringList.Create; 
    try 
    Writeln('Enter a char, a number, a char and a number again, separated by spaces:'); 
    // Read entire line 
    Readln(s); 

    // Split s into four entries in the string list 
    sl.Delimiter := ' '; 
    sl.DelimitedText := s; 
    if sl.Count >= 4 then 
    begin 
     a := sl[0][1];   // first string item, convert to char 
     b := StrToInt(sl[1]); // second string item, convert to integer 
     c := sl[2][1];   // third string item, convert to char 
     d := StrToInt(sl[3]); // fourth string item, convert to integer 
    end; 
    finally 
    sl.Free; 
    end; 
    Writeln(a, ' ', b, ' ', c, ' ', d); 
end; 

begin 
    Test; 
end. 

很可能需要添加錯誤檢查的如果輸入錯誤,可能使用TryStrToInt而不是StrToInt,但我將其作爲練習。

正如@lurker所說,在您的問題中,您正在嘗試讀取導致問題的Chars,因爲例如空格和製表符都是Chars,因此空格分隔符不能按預期的方式工作。這會弄亂整個輸入。獲取這些項目的唯一方法是讀取整個字符串,然後解析它(分割它)。

如果您的FreePascal版本有一個單位StrUtils並具有SplitString函數,您可以使用該函數代替TStringList。它使用給定的分隔符(此處爲' ')將字符串拆分爲動態數組。這可能更簡單一點,但不是很多。

+0

我正在使用Free Pascal Compiler版本3.0.0,當試圖運行你的代碼時,它在'try'和'finally'行產生了一些錯誤。因爲我剛開始學習使用帕斯卡我不知道如何解決它,所以我刪除了這些行,它的工作。謝謝。 – Yusufmm

+0

將{$ mode delpihi}添加到頂部以便將編譯器置於delphi模式下或使用-Sd編譯 –

+0

@Marco:不是純粹的FreePascal有try-finally,還是它的工作方式不同? –

-1

我嘗試了這個工作,但它需要更多的未使用的變量。

var 
    a, c: char; 
    b, d: char; 
    e, f, g, h: char; // take care of space 
    p, q: char; 
    x, y: longint; 
begin 
    read(a, b, c, d, e, f, g, h); 
    p := a; 
    q := e; 
    x := ord(c) - 48; 
    y := ord(g) - 48; 
    write(p, ' ', x + 1, ' ', q, ' ', y + 1); 
end. 
+0

你可以嘗試使用很多變量,然後可能找到正確的數字,所以其中一些變量充滿了有意義的內容,但這不是編程。你應該知道會發生什麼。不要使用Char來讀取空間,因爲如果有人進入'A 107 B 2',可能會有一些額外的空間,那麼你的運氣不好。不要這樣做。 「它與這個輸入一起工作」並不是以錯誤的方式做事的好藉口。 –

+1

我真的很想知道誰回覆了這個答案。添加變量直到它匹配一個單獨的輸入是不正確的編程。 –

+0

你可以強制這個與額外的變量一起工作,但這是一個非常糟糕的方法,因爲它使得代碼非常脆弱。輸入格式的各種細微變化都會導致代碼再次失敗。 – lurker

相關問題