使用带有短路的标量或

问题描述 投票:0回答:1

对于我们需要在编程课上创建的BMI计算器,我需要确保尺寸和重量的值在一定的数字范围内。 每次程序告诉我只能在使用短路或时比较标量。 然而,经过一些研究后,我发现浮点数也是标量,所以现在我想知道我做错了什么。

这是我现在编写的代码:

weight = input("please enter your weight in kgs: ","s");
str2double(weight)
while isnan(weight)
weight = input("please enter your weight in kgs: ","s");
str2double(weight);
end
height = input("please enter your size in meters: ", "s");
str2double(height)

h = isscalar(size)
w = isscalar(height)

while isnan(height) || height > 2.2 || height < 1.3
hight = input("please enter your size in meters: ","s");
str2double(height);
end

我已经尝试过单独比较两个浮点数,但这也不起作用。 然后我做了一些研究,这也无助于解决问题。 我现在还将变量“size”的名称更改为“height”,但这没有帮助。

这是一个输入/输出示例:

请输入您的体重(公斤):70

ans=

70

请输入您的尺寸(以米为单位):1.87

ans=

1.8700

h=

逻辑

0

w=

逻辑

0

逻辑 AND (&&) 和 OR (||) 运算符的操作数必须可转换为逻辑标量值。使用 ANY 或 ALL 函数将操作数减少为 逻辑标量值。

matlab scalar short-circuiting
1个回答
0
投票

这里,

height
是一个字符串,一个字符数组(不是标量):

height = input("please enter your size in meters: ", "s");

在这里,您将字符串转换为双精度,但不将结果存储在任何地方。

height
仍然是一个字符数组:

str2double(height)

您可能需要将最后一行替换为

height = str2double(height);

或者,更好的是,从

"s"
调用中删除
input
。 MATLAB 将评估用户输入的内容,因此在您的情况下将返回双精度值(但如果用户输入“
[1,1]
”或“
'foo'
”,它将返回一个数组或字符串,因此您必须测试为此)。

© www.soinside.com 2019 - 2024. All rights reserved.