Input 如何在Ada中从用户检索Y/N
我写了一个程序,它将决定某个想象中的学校是否会下雪。我的程序运行正常我只是有个问题 基本上我想要的是真/假为Y/N,然后当我打印SnowDay时,告诉我是否有一个雪天。然后它将打印“是”或“否”,而不是“真”或“假”Input 如何在Ada中从用户检索Y/N,input,boolean,output,ada,Input,Boolean,Output,Ada,我写了一个程序,它将决定某个想象中的学校是否会下雪。我的程序运行正常我只是有个问题 基本上我想要的是真/假为Y/N,然后当我打印SnowDay时,告诉我是否有一个雪天。然后它将打印“是”或“否”,而不是“真”或“假” 要将布尔值打印为“是”或“否”,只需编写一个函数: function Boolean_Image(B: Boolean) return String is begin if B then return "Yes"; else retu
要将
布尔值打印为“是”或“否”,只需编写一个函数:
function Boolean_Image(B: Boolean) return String is
begin
if B then
return "Yes";
else
return "No";
end if;
end Boolean_Image;
并用它代替Boolean'Image
要从用户处读取值,将其作为Y或Y表示True
,或作为N或N表示False
,只需读取字符
值并对其进行测试,以确定要设置的布尔值。考虑如果用户输入的字符不是Y、Y、N或N中的任何一个,您希望如何响应。您可以使用Get_Immediate
读取单个字符,而无需等待输入换行。假设我理解您的意图:
(1) 如果您希望用户为SophieAssignment
输入Y或N,则有两种可能:
您可以输入字符串并自己分析该字符串
Put(Item => "Does Sophie have a big assignment due in class, True/False? ");
declare
Answer : String := Get_Line; -- Get_Line is in Ada.Text_IO
begin
if Answer = "Y" or else Answer = "y" or else Answer = "Yes" or else
Answer = "yes" then
SophieAssignment := True;
elsif Answer = "N" or else Answer = "n" or else Answer = "No" or else
Answer = "no" then
SophieAssignment := False;
else
-- whatever you want to do for an invalid entry
end if;
end;
(这是可以改进的,但我只是尝试介绍基本方法。)另一种可能是定义自己的枚举,其值为Y
和N
:
type Yes_No is (N, Y);
package Yes_No_IO is new Enumeration_IO (Yes_No); -- Enumeration_IO is in Ada.Text_IO
Answer : Yes_No;
Put(Item => "Does Sophie have a big assignment due in class, True/False? ");
Yes_No_IO.Get(Item => Answer);
SophieAssignment := (Answer = Y);
Get
如果用户输入枚举名称(在任何一种情况下),此处将Answer
设置为Y
或N
;如果输入其他内容,它将引发数据错误。如果您想更好地控制输入的处理方式,我更喜欢第一种方法。对于第二种情况,如果用户输入“Y Z”,Get
将返回Y
,并且Z
将留在输入流中等待下一个输入操作。此外,第一种方法比第二种方法更好地允许多个可能的答案,尽管您可以使用类似
type Yes_No is (N, No, Y, Yes);
(2) 要根据布尔值输出“Yes”
或“No”
,可以使用Keith答案中的函数,也可以设置数组:
type Const_String_Acc is access constant String;
Yes_No_Image : constant array (Boolean) of Const_String_Acc :=
(False => new String' ("No"),
True => new String' ("Yes"));
Put(Item => "Should we have a snow day today? " & Yes_No_Image (SnowDay).all);
请学习如何格式化你的代码,这样你就不知道文本或代码本身在哪里了。这是如何回答问题的?它不影响I/O。
type Yes_No is (N, No, Y, Yes);
type Const_String_Acc is access constant String;
Yes_No_Image : constant array (Boolean) of Const_String_Acc :=
(False => new String' ("No"),
True => new String' ("Yes"));
Put(Item => "Should we have a snow day today? " & Yes_No_Image (SnowDay).all);