在MATLAB中使用fprintf()和disp()函数向命令窗口显示消息



当前正在处理一个项目,其中我必须接受多个用户输入。因为我的输入提示必须向用户概述关于他们应该如何输入值的特定格式,这使得每个输入提示都相当长,所以我认为用换行符分隔每个提示是合适的,这样很容易区分它们/这样看起来就很好看。最后一个提示有两行长,所以如果它们都混在一起而不是用换行符分隔,就很难将这一行与其他行区分开来。

我研究了fprintf()disp()的用法,发现fprintf()有一些棘手的行为,有时如果不包括fflushf()等内容,就无法工作。此外,我读到fprintf()实际上是用于将数据写入文本文件的(至少从MathWorks页面(,如果真的有一种更简单的方法(我们在剧本效率方面的评分非常苛刻(,我肯定会看到我的教授为此扣分。

disp()命令似乎更符合我想要的内容,但我在它上面找不到任何能够支持n等格式化运算符的内容。目前,我已经将n的用法替换为disp(' '),但这肯定会导致扣分。

TL;DR是否有更有效的方法在不使用fprintf('textn')的情况下创建换行符?我将附上我的脚本的一部分供您查看:

disp('i) For the following, assume Cart 1 is on the left and Cart 3 is on the right.');
disp('ii) Assume positive velocities move to the right, while negative velocities move to the left.');
prompt = 'nEnter an array of three cart masses (kg) in the form ''[M1 M2 M3]'': ';
m = input(prompt);
prompt = 'nEnter an array of three initial cart velocities (m/s) in the form ''[V1 V2 V3]'': ';
v0 = input(prompt);
disp(' '); 
disp('Because the initial position of the three carts is not specified,');
prompt = 'please provide which two carts will collide first in the form ''[CartA CartB]'': ';
col_0 = input(prompt);

您可以使用newline函数使disp显示新行。将多个字符串放在方括号中会将它们连接起来。

disp(['Line 1' newline 'Line 2'])

您提到使用fprintf,但正如您所发现的,这是用于写入文件的。如果需要,可以使用sprintf函数来显示相同格式的字符串。

disp(sprintf('Line 1 nLine 2'))

除了Matt的解决方案外,我还想出了另一种方法来解决我的问题,并想在这里为将来遇到同样问题的人发布它。

经过一些实验和思考,我认为最有效的方法(理想情况下(根本不涉及使用disp()fprintf(),而是在理论上,涉及实际操作输入提示本身以显示在多行上(而不是在每个提示的最后一行之前添加"伪"行,使其看起来像是提示本身的一部分(。我一直都知道,只要一个换行符n就会在句子中间给我一个换行,理论上这是有效的。但是,由于最后一个提示有两行长,所以只需在中途键入一行n,就会使代码非常长,这正是我最初试图避免的。

我意识到我最初的问题并没有明确提到将两个(或多个(字符串连接起来以形成一个输入提示,该提示出现在控制台和脚本本身的多行中,但这基本上就是我写这篇文章的目的,我对对此缺乏明确性表示歉意。

无论如何,我在不必使用disp()fprint()的情况下解决了这个问题,方法是将提示声明为字符串数组,而不是像您在问题中最初提供的代码中看到的那样,使用disp()和/或fprintf()将其声明为单个字符串,并在上面指定提示的前几行。以下是它以前的样子:

disp(' '); 
disp('Because the initial position of the three carts is not specified,');
prompt = 'please provide which two carts will collide first in the form ''[CartA CartB]'': ';
col_0 = input(prompt);

与现在相比:

prompt = ['nBecause the initial position of the three carts is not specified, please',...
'nprovide which two carts will collide first in the form ''[CartA CartB]'': '];
col_0 = input(prompt);

简而言之,您可以通过将整个提示声明为字符串数组并在您认为合适的地方插入n来连接整个提示的部分。

最新更新