【问题标题】:How to change this while loop to a for loop in C?如何将此while循环更改为C中的for循环?
【发布时间】:2013-02-01 12:20:50
【问题描述】:

此代码用于使用 C 使模拟器中的机器人在特定路径中移动。while 循环 的代码是我需要进行更改的地方,我是想知道如何更改代码以使机器人沿直线移动并停止,以及如何使用“定时距离”使其沿三角形移动。

while (1) {
    sprintf(buf, "M LR 60 -60\n");
    write(sock, buf, strlen(buf));
    memset(buf, 0, 80);
    read(sock, buf, 80);
}

M LR 是机器人左右电机的名称(机器人有两个电机使其移动),60 和 -60 是它们的速度。这段代码使机器人旋转。

完整代码在此链接:[C Robot]

如何使这段代码工作?

int k = 1;

for (k = 1; k < 3 ; k++){
    sprintf(buf, "M LR 20 10\n");
    write(sock, buf, strlen(buf));
    memset(buf, 0, 80);
    read(sock, buf, 80);
}

for (k=3; k > 3; k++) {
    sprintf(buf, "M LR 0 0\n");
    write(sock, buf, strlen(buf));
    memset(buf, 0, 80);
    read(sock, buf, 80);
}

【问题讨论】:

  • 您的标题确实与您的问题所说的不符。
  • 您的题名好像不对。你只是想用做同样事情的不同结构替换 while 循环,还是想实现完全不同的东西?!
  • 使用当前的 for 循环:for (k = 3; k &gt; 3; k++) => 因为 k 在进入循环之前被分配了 3,所以测试 k &gt; 3 从一开始就为假,并且循环被简单地跳过。此外,由于“M LR”序列后面的数字给出了应用于电机的速度,我想如果你想让你的机器人移动,你应该设置正值。

标签: c robotics


【解决方案1】:
for(;;) {
    sprintf(buf, "M LR 60 -60\n");
    write(sock, buf, strlen(buf));
    memset(buf, 0, 80);
    read(sock, buf, 80);
}

我认为没有理由这样做。

【讨论】:

  • 一些编译器(例如 MSVC++)会警告while (1),但不会警告for(;;)
  • int k = 1; for (k = 1; k 3; k++) { sprintf(buf, "M LR 0 0\n");写(袜子,buf,strlen(buf)); memset(buf, 0, 80);读取(袜子,buf,80); }
  • while(1) 在 C 中是一个合法的结构。为什么它会发出警告?
  • 因为编写无限循环的正确方法是for(;;)。 (说真的,原因可能是编译器编写者认为可能会不小心输入错误的条件,所以警告更安全。类似于 - 也合法 - if (x = y) 的警告。)
  • @DanielFischer 这就是 MSVC 的问题,它认为程序员是出了名的懒惰.. 而实际上大多数人在编程时都很专心(这就是为什么我有时喜欢 GCC,你可以自己开枪......没有字符串附)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多