Использование функций fprintf () и disp () для отображения сообщений в командном окне в MATLAB? - PullRequest
0 голосов
/ 11 декабря 2018

В настоящее время работаю над проектом, в котором я должен принять несколько пользовательских входов.Поскольку мои подсказки ввода должны указывать пользователю конкретное форматирование относительно того, как они должны вводить свои значения, это делает каждую подсказку ввода довольно длинной, и поэтому я счел целесообразным разделить каждую строку с разрывом строки, чтобы их было легко отличить друг от друга./ так что это выглядит красиво.Последнее приглашение длиной в две строки, поэтому было бы трудно отличить его от остальных, если бы они были все перемешаны, а не разделены переносами строк.

Я исследовал использование fprintf() иdisp() и обнаружили, что fprintf() имеет некоторые хитрые действия и иногда не будет работать без включения таких вещей, как fflushf() и т. Д. Кроме того, я читал, что fprintf() на самом деле предназначен для записи данных в текстовые файлы (со страницы MathWorks, по крайней мере), и использование ее для других целей - это то, что я определенно мог бы увидеть, как мой профессор вычитал баллы, если есть действительно более простой способ (нас очень резко оценивают по эффективности сценариев).

Команда disp(), кажется, больше соответствует тому, что я ищу, однако я не могу найти в ней ничего, что могло бы поддерживать операторы форматирования, такие как \n.Сейчас я прибег к замене использования \n на disp(' '), однако это, безусловно, приведет к вычету очков.

TL; DR Есть либолее эффективный способ создания переносов строк без использования fprintf('text\n')?Я приложу часть моего сценария, чтобы вы посмотрели:

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);

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

В дополнение к решению Мэтта, я нашел другой способ решения своей проблемы и хотел опубликовать его здесь для всех, кто столкнется с такой же проблемой в будущем.

После некоторых экспериментов и размышлений, я решил, чтоНаиболее эффективный способ сделать это (в идеале) вообще не будет включать использование 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, где вы считаете нужным.

0 голосов
/ 11 декабря 2018

Вы можете получить disp для отображения новой строки с помощью функции newline.Помещение нескольких строк в квадратные скобки объединит их.

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

Вы упомянули использование fprintf, но, как вы обнаружили, это предназначено для записи в файлы.Вы можете использовать функцию sprintf для отображения тех же форматированных строк, если это необходимо.

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