使用具有短路或

using scalars with short-circuiting or

提问人:Hauke Jakubowski 提问时间:11/17/2023 最后编辑:Cris LuengoHauke Jakubowski 更新时间:11/18/2023 访问量:31

问:

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

这里有我现在写的代码:

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 标量 短路

评论

2赞 Wolfie 11/17/2023
size是一个非常常用的内置函数,使用不同的变量名称。您收到的实际逐字错误消息是什么?请您编辑您的问题以包含它,以及您正在测试的一些示例输入
0赞 Cris Luengo 11/18/2023
请不要在您的帖子中编辑这样的评论。如果您愿意,您可以在问题或答案下发表评论,但通常点赞(一旦您有代表)并接受有用的答案是表达感谢的最佳方式。stackoverflow.com/help/someone-answers

答:

1赞 Cris Luengo 11/17/2023 #1

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

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

在这里,您将字符串转换为双精度,但不会将结果存储在任何地方。 仍然是一个字符数组:height

str2double(height)

您可能希望将最后一行替换为

height = str2double(height);

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