Comme @DavidHeffernan a commenté, et comme expliqué @lurker, votre code ne fonctionnera pas en l'état .
En supposant que vous avez une la version FreePascal qui connaît le type TStringList
dans l'unité Classes
(Je suppose que tous les récents ne), vous pouvez effectuer les opérations suivantes:
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.
Vous devriez probablement ajouter le contrôle d'erreur pour la Si vous obtenez une mauvaise entrée, et peut-être utiliser TryStrToInt
au lieu de StrToInt
, mais je vais laisser cela comme un exercice. Comme @lurker l'a dit, dans votre question, vous essayez de lire les Chars, ce qui cause des problèmes, car par exemple un espace et une tabulation sont aussi des Chars, donc les délimiteurs d'espace ne fonctionnent pas comme prévu. Cela va gâcher toute la saisie. La seule façon d'obtenir ces éléments est de lire toute la chaîne puis de l'analyser (la diviser).
Si votre version de FreePascal a une unité StrUtils
avec une fonction SplitString
, vous pouvez l'utiliser à la place de TStringList
. Il divise la chaîne en utilisant un délimiteur donné (ici ' '
) dans un tableau dynamique. C'est peut-être un peu plus simple, mais pas beaucoup.
Lire la chaîne, et l'analyser –
@DavidHeffernan, ok je vais l'essayer. – Yusufmm
Vous avez besoin d'une fonction qui divise les chaînes sur les espaces. Un websearch révélera plusieurs de ces fonctions. –