I have defined
subtype String10 is String(1..10);
and I am attempting to get keyboard input to it without having to manually enter whitespace before hitting enter. I tried get_line() but from some reason it wouldn’t actually wait for input before outputting the get put() command, and I also think it will just leave whatever was in the string before there and not fill it with white space.
I know about and have used Bounded_String and Unbounded_String, but I am wondering if there is a way to make this work.
I’ve tried making a function for it:
--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;
but, here, I know the s(i) doesn’t work, and I don’t think the
"if Ada.Text_IO.End_Of_Line = false then"
does what I’m hoping it will do either. It’s kinda just a placeholder while I look for the actual way to do it.
I been searching for a couple hours now, but Ada documentation isn’t as available or clear as other languages. I’ve found a lot about getting strings, but not what I’m looking for.
Just pre-initialize the string with spaces before calling
Get_Line.Here’s a little program I just threw together:
and the output I get when I run it:
Another possibility, rather than pre-initializing the string, is to set the remainder to spaces after the
Get_Linecall:For very large arrays, the latter approach might be more efficient because it doesn’t assign the initial portion of the string twice, but in practice the difference is unlikely to be significant.