如何摆脱这个 Do-While 循环?

2023-12-30

我有这个基本的 Arduino 代码,我想要退出此 Do-While 循环的 2 个选项。 我简化了原始代码以突出真正的问题:Do-While无法识别 OR ||退出循环的条件

在此代码中,我从两个等于 0 的整数变量开始,一旦它们进入 Do-While,它们将被设置为都等于 2,以便它们可以在第一个中立即退出 Do-While迭代。

这是我的代码:

int fin = 0;
int ending = 0;
int counter = 0;


void setup() {

  Serial.begin(9600);

}; //void setup



void loop ()  {

  do  {

      Serial.println("We are IN Do-While #1");
      ending = 2;
      //fin = 2;

  } while ((ending < 1) || (fin < 1)); //I have just one condition for exit the Do-While ending = 1


Serial.println("We are OUT Do-While #1");
delay(3000);


  do {

    counter++;
  } while(counter<=100);

  Serial.println("We are OUT Do-While #2");
delay(3000);

  }

我的问题是我没有设置fin = 2, 因为我想测试 OR 条件是否有效.

但似乎它无法退出 Do-While,除非它们都等于 2。这对我来说很奇怪,因为 OR 条件允许使用双选项退出 Do-While,在这种特殊情况下,这些选项是:

结束或(替代选项)..fin<1

另外,如果我用 AND 更改 while 条件(代码的其余部分相同),它的行为就像我想要的那样:这样我就有两种方法退出 Do-While 循环。 像这样:

} while ((ending < 1) && (fin < 1));

但不是在 AND 条件下我必须匹配两个条件结束 >= 1并且(同时)鳍 >= 1退出循环?

为什么会发生这种情况? 我该如何解决这个问题?


请记住,如果你说while (condition),你会循环只要condition评估为真。所以既然你的条件是

(ending < 1) || (fin < 1)

唯一让这个错误的方法是如果两者都ending < 1是假的AND fin < 1也是假的。

当你遇到这样的困惑时,一个简单的技巧就是使用德摩根定律 https://en.wikipedia.org/wiki/De_Morgan%27s_laws来找到反证词。换句话说,如果你想循环 while(ending < 1) || (fin < 1),这相当于当相反的情况成立时您想要停止循环。使用德摩根定律,我们可以看到:

!((ending < 1) || (fin < 1))
!(ending < 1) && !(fin < 1)
ending >= 1 && fin >= 1

所以我们只在以下情况下停止循环ending >= 1 && fin >= 1!

如果您想在以下情况下停止循环,则以另一种方式工作:ending >= 1 || fin >= 1,那么当相反的情况成立时我们将循环。再次运用德摩根定律......

!(ending >= 1 || fin >= 1)
!(ending >= 1) && !(fin >= 1)
ending < 1 && fin < 1

所以你一直想要一个 AND 而不是 OR!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何摆脱这个 Do-While 循环? 的相关文章

  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 在 C++ 中将成对向量转换为两个独立向量的最快方法

    假设我有一个vector of pair
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 内容重叠div

    我遇到内容重叠的问题 当我尝试这段 HTML 代码时 content left 中的文本与我希望它包含的整个区域重叠 当我将高度更改为自动时 它并不能解决问题 内容向右重叠 底部被切断 wrapper height 1500px margi
  • 使用 Angular-CLI 安装第 3 方 jquery-ui

    我正在为我的 Angular2 项目使用 Angular CLI 在我的项目中我想使用jquery ui 我安装了 jquery ui npm install jquery jquery ui 我编辑了我的 angular cli buil
  • Android 存储访问框架在 asynctask 期间未授予持久权限

    我在这里设置了意图标志 public void createAlbum View view Intent intent new Intent intent setType image intent setAction Intent ACTI
  • 如何在 django 1.10 中使用“unaccent”进行全文搜索?

    我们正在开发一个项目并且我们正在使用Django 1 10a1 我们使用 Django 全文搜索和 PostgreSQL 但我们需要使用非重音符号 所以 我有这个代码 search Car query set Article objects
  • Python 尾随 L 问题

    我正在使用 Python 编写嵌入式系统中内存中特定位置 32 位地址 的一些操作脚本 当我将这些地址与字符串 整数和十六进制值相互转换时 似乎会出现尾随的 L 这可能是一个真正的痛苦 例如以下看似无害的代码将无法工作 int hex 42
  • 如何在 Jasmine 单元测试中使用 Sinon 模拟 jQuery 动画?

    我有一个 1 秒的 jQuery animate页面加载后 5 秒启动的操作 我在 Jasmine 单元测试代码中设置了一个 Sinon 计时器 并在 7 秒后进行测试 看看动画后属性是否符合预期 它无法正常工作 因此我在 Jasmine
  • 创建一个调用 jsf 方法的简单链接

    我正在创建一个注销链接 这是注销 bean 的代码 public void doLogout try FacesContext getCurrentInstance getExternalContext getSessionMap put
  • 在“输入”元素之前或之后生成CSS内容[重复]

    这个问题在这里已经有答案了 在 Firefox 3 和 Google Chrome 8 0 中 以下内容按预期工作 span Test span 但当元素为
  • Java 中的套接字和进程

    在Java中 最好的方法是打开一个持续监听的端口 并且在收到数据包时仍然发送 目前我对网络编程还不是特别精通 所以我在网上找到的教程并不是特别有帮助 将侦听套接字作为服务器套接字并在我用来向服务器发送数据的套接字的单独线程中运行它是否有意义
  • 从静态方法访问非静态成员变量

    我刚刚开始学习 Java 需要一些帮助 我知道我无法对静态方法进行非静态引用 但我需要帮助来解决它 我读到您可以通过创建对象的实例来访问非静态成员变量 但我不确定具体如何操作 这是代码中的一些内容 任何帮助或指示将不胜感激 package
  • 根据 xml 元素的值进行流量控制

    我有一个很长的 xml 数据文件 其中包含 500 多个项目 它的形式如下
  • 如何访问HTML5视频解码功能?

    HTML5 有
  • 为什么这个 LINQ 表达式会破坏我的循环和转换逻辑?

    背景 ArticleService是一个类 为前端层提供方法 方便与后端业务 它的两个基本职责是转换 ViewModel ArticleViewModel 到适当的模型 Article 在保存数据时 反之 在获取数据时将模型转换为 View
  • 从 .NET 中的 COM 对象包装器重定向 STDERR 输出

    我正在尝试在 NET 库中使用 ImageMagick COM 对象 ImageMagickObject 该库旨在从 IronRuby 中调用 但这并不是那么重要 我想采用这种方法 因为它适合我现有的调用 当前调用 ImageMagick
  • 带 D3 (v4) 直方图函数的胖尾意味着空箱

    我正在尝试充分利用 D3 直方图函数 但由于笨拙的肥尾数据分布而陷入困境 这data points下面的数组涉及多年来的国家人口密度 像香港这样人口密度高的城市是造成 肥尾 的原因 我想将数据分成八个单独的桶 我没有指定一个域 我假设直方图
  • 如何使用 NHibernate 模式生成更新数据库表模式?

    我试图弄清楚如何使用 NHibernate 配置和映射来更新表模式 而不是删除并重新创建它们 目前我正在使用NHibernate Tool hbm2ddl SchemaExportobj 使用 FluentNHibernate 生成 mys
  • 相当于给定 wget 命令的 Python

    我正在尝试创建一个与 wget 命令执行相同操作的 Python 函数 wget c read timeout 5 tries 0 URL c 如果下载中断 则从上次中断的地方继续 read timeout 5 如果超过 5 秒没有新数据传
  • 如何在React js文本区域内渲染漂亮的json数据?

    我是 React js 新手 我在渲染文本区域内漂亮的 json 数据时遇到问题 我不知道哪一部分是错误的 我希望我的 Prettyjson 像这样在 textarea 内渲染 email email protected cdn cgi l
  • 首先使用代码禁用整数主键上的标识(自动递增)

    我在 ASP NET MVC 3 应用程序中使用代码优先方法 并在模型中使用所有整数主键 public int Id get set 默认情况下配置为自动递增的身份 如何禁用此功能并启用手动输入主键整数的方法 实际情况是Id整数具有特殊的含
  • 如何摆脱这个 Do-While 循环?

    我有这个基本的 Arduino 代码 我想要退出此 Do While 循环的 2 个选项 我简化了原始代码以突出真正的问题 Do While无法识别 OR 退出循环的条件 在此代码中 我从两个等于 0 的整数变量开始 一旦它们进入 Do W