Хотите, чтобы пользователь вводил ровно "(x, y)", включая круглые скобки и запятую - PullRequest
1 голос
/ 05 мая 2020

То, что у меня сейчас есть, выдает ошибку. По сути, мне нужно получить точный ввод «(x, y)», а затем сохранить x в массиве и y в массиве. У меня просто возникли проблемы с переходом от ввода (x, y) к сохранению x в его массиве и y в его массиве.

Я хочу, чтобы пользователь ввел n точек, где они указывают n Пример:

Пользователь хочет 2 очка. Они вводят: (1,2) (2,5)

Мой учитель хочет, чтобы ввод был точно (x, y). Включая круглые скобки и запятую. Я буду в порядке, как только смогу получить x и y в соответствующие массивы.


strAskN = "Enter the number of data points to be entered. ";
disp(strAskN);
n = countRequest();

strAskCoordA = ('Enter the coordinate pair (x,y) in scientific '); 
strAskCoordB = ('notaion with 5 significant figures.');
disp (strcat(strAskCoordA,strAskCoordB));
for i = 1:n
    z = input('Enter Coordinate: ');
    a(i) = z;
end

function n = countRequest()
   n = input(' ');
end

Вывод:


>> Enter the number of data points to be entered. 
 2
>> Enter the coordinate pair (x,y) in scientific notaion with 5 significant figures.
>> Enter Coordinate: (2,3)
Error using Assignment5 (line 16)
Error: Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.

Строка 16 это строка z = input('Enter Coordinate: ');


Я не уверен, почему она не разрешает строку с (x, y). Я предполагаю, что скобки или запятая все испортили. Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 05 мая 2020

Вы можете заставить MATLAB возвращать входные данные в виде массива символов с флагом s in input(), но я рекомендую немедленно преобразовать его в строку, чтобы избежать проблем с его назначением в переменную позже

z = input('Enter Coordinate: ','s');
a(i) = string(z)

Это потому, что жало всегда имеет размер 1x1, в то время как тот же массив символов может иметь размер 4x1. Обратите внимание, что вы можете выделить свой строковый массив перед l oop с помощью a = strings(n,1).

Теперь вернемся к вашей проблеме: ошибка в том, что вы ввели (x,y), а не "(x,y)" или '(x,y)' как предложено вашим заголовком. MATLAB пытается оценить выражение, которое набрано для ввода, поэтому, если вы вводите недопустимое выражение (которое в большинстве случаев начинается с (), возникает ошибка, сообщающая вам, что () предназначен для только функции или математические выражения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...