Каждый function
работает в своем собственном рабочем пространстве, это означает, что он не знает состояния или содержимого переменных вне его.Если вы хотите, чтобы функция знала что-то конкретное (например, название автомобиля), вы должны указать это для функции во входных параметрах.Функция может иметь несколько входных параметров, вы не ограничены только одним.
Прежде чем перейти к Group_Function3
, я хотел бы предложить новый способ для Group_Function1
.
Group_Function1:
Вы запускаете цикл, чтобы независимо запрашивать имя каждого автомобиля.Довольно утомительно проверять каждое диалоговое окно.Вот способ запросить 4 названия автомобилей за один раз:
замените начало вашего сценария на:
title1 = 'Cars';
prompt1 = {'How Many Cars (4): '};
answer1 = inputdlg(prompt1, title1 );
nCars = str2double( answer1{1} );
CarNames = getCarNames(nCars) ; % <= use this function
% [N] = Group_Function1(Q1); % instead of this one
и замените Group_Function1
на:
function CarNames = getCarNames(nCars)
title = 'Car Names';
prompt = cellstr( [repmat('Name of car #',nCars,1) , sprintf('%d',(1:nCars)).'] ) ;
CarNames = inputdlg( prompt, title, [1 80] ) ;
end
Теперь CarNames
- это массив ячеек, содержащий имена ваших 4 машин (как делала ваша переменная N
ранее. Я рекомендую чуть более явные имена переменных).
Вы можете запустить остальныевашего кода как есть (просто замените N
на CarNames
и Q1
на nCars
).
Group_Function3:
когдаВы попадаете на Group_Function3
, вам необходимо отправить текущее имя автомобиля в функцию (чтобы оно могло использовать имя в заголовке или приглашении).Поэтому замените ваш Group_Function3
следующим образом (мы добавим входную переменную в определение функции):
function H = Group_Function3( V , thisCarName )
prompt = {V};
title = ['Variable Ratings For' thisCarName];
H = inputdlg(prompt, title, [1 80])';
end
и в вашем основном скрипте назовите его так:
for h = 1:nCars
thisCarName = carNames{h} ;
H = Group_Function3( V , thisCarName ) ;
% ...
% anything else you want to do in this loop
end