【问题标题】:Printing a string as a variable in Pascal在 Pascal 中将字符串打印为变量
【发布时间】:2012-05-31 14:19:21
【问题描述】:

这是我拥有的字符串变量:

question1 := 'Please enter 1, 2 or 3.';

我还有一个函数应该打印出 question1 变量,但它会在打印之前生成问题编号。这是该函数的片段,它将问题编号 (question : integer) 转换为字符串变量 (test : string),然后将字符串“问题”与该字符串变量 (test : string) 连接起来。

str(question,test);
test := concat('question',test);
writeln(test);

这个 writeln 的结果是 'question1'(不带引号)。我希望它将 question1 变量输出为文本字符串,而不仅仅是这个变量的名称,以便 writeln 打印 Please enter 1, 2 or 3. 我试过 writeln(question1) 并且它可以工作,但是,似乎我上面的函数(或片段它)这样做:writeln('question1')。我该如何解决?

【问题讨论】:

  • 不是很清楚,抱歉。您能否展示您正在/尝试做的事情的更广泛背景?如果您执行writeln(q1); 并且它就像writeln('q1'); 一样工作,那么q1 必须是在该范围级别可访问的字符串变量或函数,并且在执行该语句时持有'q1' .如果不是这样,但 writeln(q1) 仍然以这种方式工作,那么它一定是特定于你正在使用的 Pascal 的特定风格的东西。或者我错过了什么?
  • 我已经更新了问题。我真的不知道如何更好地解释它。基本上,我有一个函数可以生成随机变量的名称(已定义为特定的文本字符串)并将该名称放入 writeln() 中。问题在于它将变量名称作为字符串值(=作为文本)放在 writeln 中,它只打印文本'question1'。我想要的是它打印字符串变量 question1,而不是它的名称。此变量包含以下字符串,我想打印它(问题 1):'请输入 1、2 或 3。'
  • 是的,现在更清楚了,谢谢。您希望解析和评估存储在test 变量中的名称。几乎不可能(肯定不是标准帕斯卡)。但是可能有其他方法可以实现您想要实现的目标。

标签: string variables printing pascal


【解决方案1】:

Pascal 不支持动态名称解析,如您所愿。您可以考虑改用arrays

…
var
  Questions: array[1..3] of string;

…

procedure InitQuestions;
begin
  Questions[1] := 'Please enter 1, 2 or 3.';
  Questions[2] := '…';
  Questions[3] := '…';
end;

procedure YourFunction(question: Integer);
begin
  …
  WriteLn(Questions[question]);
  …
end;

…

begin
  …
  InitQuestions;
  …
  YourFunction(1);
  …
end.

【讨论】:

  • 这非常有效。我无法想象为什么我自己不考虑数组 - 这是一个非常简单的解决方案!也许我认为有一种更简单的方法可以做到这一点......谢谢。
【解决方案2】:

据我所知,您需要以下内容

writeln (question1, 'question ', question);

您不需要连接字符串值,也不需要将问题编号转换为字符串 - writeln 具有神奇的能力,可以接受任意数量的变量并根据其默认格式(字符串、整数、实数和布尔值)。

事实上,您实际上并不需要创建 'question1' 变量 - 您可以简单地编写

writeln ('Please enter 1, 2 or 3. Question', question);

【讨论】:

  • 这个问题是我需要单独编写每个 writeln,上面的答案(使用数组)帮助我自动完成,每次使用一个函数和不同的问题。该函数的重点是根据先前的答案确定一个新问题,并将 question1、question2、question3 等放入 writeln()。
猜你喜欢
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 2021-08-05
相关资源
最近更新 更多