Ada: Erste Benutzereingabe, um einen String(1..10) und füllen den rest mit Leerzeichen
Ich habe
subtype String10 is String(1..10);
und ich bin versucht zu bekommen Tastatur-Eingaben auf, ohne dass manuell eingeben von Leerzeichen drücken Sie enter. Ich habe versucht, get_line (), aber aus irgendeinem Grund würde es nicht eigentlich warten, bis Eingang vor der Ausgabe der get put () - Befehl, und ich denke auch, es wird nur verlassen, was war in der Zeichenfolge, bevor Sie es und nicht füllen Sie ihn mit Leerzeichen.
Ich kennen und benutzt haben Bounded_String und Unbounded_String, aber ich Frage mich, ob es einen Weg gibt, um diese Arbeit zu machen.
Ich habe versucht, eine Funktion für Sie:
--getString10--
procedure getString10(s : string10) is
c : character;
k : integer;
begin
for i in integer range 1..10 loop
get(c);
if Ada.Text_IO.End_Of_Line = false then
s(i) := c;
else
k := i;
exit;
end if;
end loop;
for i in integer range k..10 loop
s(i) := ' ';
end loop;
end getString10;
aber, ich weiß, hier die s(i)
funktioniert nicht, und ich glaube nicht, dass die
"if Ada.Text_IO.End_Of_Line = false then"
tut, was ich hoffe, es wird entweder zu tun. Es ist irgendwie nur ein Platzhalter, während ich für die tatsächliche Art und Weise, es zu tun.
Ich war auf der Suche für ein paar Stunden jetzt, aber Ada Dokumentation ist nicht als verfügbar oder klar als andere Sprachen. Ich habe eine Menge über erste-Zeichenfolgen, aber nicht das, was ich Suche.
- Vergleiche auf Gleichheit zu
true
undfalse
sind nicht besonders klar. Anstattif Ada.Text_IO.End_Of_Line = false then
haben, schreiben Sie einfachif not Ada.Text_IO.End_Of_Line then
. (Obwohl ich glaube nicht, dass Sie brauchen, um zu verwendenEnd_Of_Line
sowieso.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur pre-initialisieren Sie die Zeichenfolge mit Leerzeichen vor dem Aufruf
Get_Line
.Hier ein kleines Programm, das ich nur warf zusammen:
und die Ausgabe die ich bekomme, wenn ich es:
Andere Möglichkeit, eher als pre-Initialisierung der string ist, ist der Rest zu Räumen nach die
Get_Line
nennen:Für sehr große arrays, die zweite Methode kann effizienter sein, weil es nicht weisen der erste Teil der saite zweimal, aber in der Praxis ist der Unterschied kaum erheblich sein.
others
Klausel in einem array Aggregat bezieht sich auf alle Elemente, die nicht anderweitig angegeben. Wenn es nur einothers
Klausel bezieht sich auf alle Elemente des Arrays.Als alternative, verwenden Sie entweder
Funktion Get_Line
, die gibt einen mit fester LängeString
das "hat einer unteren Grenze von 1 und einer oberen Schranke für die Anzahl der Zeichen Lesen." Das BeispielLine_By_Line
verwendet die Variante, die aus einer Datei liest. Wenn es sein muss, dann können Sieprocedure Move
zu kopierenSource
string an dieTarget
string; das Verfahren automatisch pads mit Platz standardmäßig.Nachtrag: Zum Beispiel, dies
Line_Test
pads mit*
still und leise kürzt lange Linien auf der rechten Seite.