我試過,但它給我的運行時錯誤106如何獲得輸入多個char和longint在單個read()中用空格分隔?
var
a, c: char;
b, d: longint;
begin
read(a, b, c, d);
write(a, ' ', b, ' ', c, ' ', d);
end.
輸入是
A 1 B 2
我試過,但它給我的運行時錯誤106如何獲得輸入多個char和longint在單個read()中用空格分隔?
var
a, c: char;
b, d: longint;
begin
read(a, b, c, d);
write(a, ' ', b, ' ', c, ' ', d);
end.
輸入是
A 1 B 2
由於@DavidHeffernan評價,並作爲@lurker解釋,你的代碼將無法正常工作,是。
假設你有一個知道單位Classes
的TStringList
類型(我想最近所有的人做)一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
。它使用給定的分隔符(此處爲' '
)將字符串拆分爲動態數組。這可能更簡單一點,但不是很多。
我正在使用Free Pascal Compiler版本3.0.0,當試圖運行你的代碼時,它在'try'和'finally'行產生了一些錯誤。因爲我剛開始學習使用帕斯卡我不知道如何解決它,所以我刪除了這些行,它的工作。謝謝。 – Yusufmm
將{$ mode delpihi}添加到頂部以便將編譯器置於delphi模式下或使用-Sd編譯 –
@Marco:不是純粹的FreePascal有try-finally,還是它的工作方式不同? –
我嘗試了這個工作,但它需要更多的未使用的變量。
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.
你可以嘗試使用很多變量,然後可能找到正確的數字,所以其中一些變量充滿了有意義的內容,但這不是編程。你應該知道會發生什麼。不要使用Char來讀取空間,因爲如果有人進入'A 107 B 2',可能會有一些額外的空間,那麼你的運氣不好。不要這樣做。 「它與這個輸入一起工作」並不是以錯誤的方式做事的好藉口。 –
我真的很想知道誰回覆了這個答案。添加變量直到它匹配一個單獨的輸入是不正確的編程。 –
你可以強制這個與額外的變量一起工作,但這是一個非常糟糕的方法,因爲它使得代碼非常脆弱。輸入格式的各種細微變化都會導致代碼再次失敗。 – lurker
閱讀字符串,並解析它 –
@DavidHeffernan,好吧,我會嘗試它。 – Yusufmm
您需要一個將空間字符串分開的函數。網絡搜索將揭示許多這樣的功能。 –