How can i do let Matlab returns variable name when i check its value?

2 次查看(过去 30 天)
Assumed that, i have a code as below:
x=input('x = ');
y=input('y= ');
z=input(z= ');
...and so on.
And my condition is value of any x , y or z... (that user will give into accrossding to keyboard) is must be positive. And i mean is after user give into value of variables above. How can i do to know what variable is negative. For example, I want to my program warning that: " Variable x is negative", My code that i tried. I create a vecto that called "Ktra" and use a for loop.
x=input('x= ');
y=input('y= ');
z=input('z= ');
Ktra=[x y z];
iam = 1;
for i=1:length(Ktra)
if Ktra(i)<0
disp('Gia tri nhap can lon hon 0');
tprintf('So thu tu cua so bi am la: %d \n', iam);
end
end
Thank you so much!

采纳的回答

Stephen23
Stephen23 2017-2-4
编辑:Stephen23 2017-2-4
This works for any number of variables, just add them to the cell array V:
V = {'x','y','z'};
S = struct();
for k = 1:numel(V)
str = sprintf('Please enter %s value: ',V{k});
tmp = str2double(input(str,'s'));
if tmp<0
disp('Gia tri nhap can lon hon 0');
fprintf('So thu tu cua so bi am la: %s \n',V{k})
end
S.(V{k}) = tmp;
end
When run it gives this:
>>
Please enter x value: 23
Please enter y value: 5
Please enter z value: -9
Gia tri nhap can lon hon 0
So thu tu cua so bi am la: z
>>
and of course the values can be simply accessed using the structure fields:
>> S.x
ans =
23
>> S.z
ans =
-9
Note also that I used the faster and more secure option of getting input to return a string: str2double(input(...,'s')), as opposed to the buggy and unpredictable input(...).
  2 个评论
Le Dung
Le Dung 2017-2-9
编辑:Walter Roberson 2017-2-9

Thank you so much. it's usefull to me.

But, now. because, here, we have a loop. Assumed that, (for example: x and y).If we have two or more values are negative. So, When program runs, it gives this:

Gia tri nhap can lon hon 0
So thu tu cua so bi am la: x
Gia tri nhap can lon hon 0
So thu tu cua so bi am la: y

I mean, program provides for us two warnings: "Gia tri nhap can lon hon 0".

Of cause, it isn't favourable. So if i only want to one waring for any case. How can i do?

Best Regard!

Walter Roberson
Walter Roberson 2017-2-9
V = {'x','y','z'};
S = struct();
gave_warning = false;
for k = 1:numel(V)
str = sprintf('Please enter %s value: ',V{k});
tmp = str2double(input(str,'s'));
if ~gave_warning && any(tmp<0)
disp('Gia tri nhap can lon hon 0');
fprintf('So thu tu cua so bi am la: %s \n',V{k});
gave_warning = true;
end
S.(V{k}) = tmp;
end

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2017-2-4
Varnames = {'x', 'y', 'z'}
Now you can display Varnames{i}

类别

Help CenterFile Exchange 中查找有关 Workspace Variables and MAT-Files 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by