【问题标题】:Two If statements execute at once, instead of one两个 If 语句同时执行,而不是一个
【发布时间】:2015-02-11 03:42:51
【问题描述】:

我有一个从 char 数组获取输入的程序,使用 strtok 函数检查输入是否包含单词“up”或“down”。如果它包含单词“up”,则我的 b 值设置为 false(即 b = 0)并且我的 c 值也设置为 false。如果 char 数组包含单词“down”,则 b 设置为 false,但是我的 c 值设置为 true(即 c=1)。

我的问题发生在字符串中包含单词“up”时,因为第一个 if 语句执行,并在屏幕上打印结果字符,但不知何故,第二个 if 也执行打印这些字符。对此问题的任何意见将不胜感激

编辑:如果我使用“down”这个词,就会出现同样的问题,两个 if 语句都被执行。

int moveC(int y, int x, int b, int i, int c) {
    // int c is a static variable(static int c = FALSE;) defined in the previous function
    int j;
    int k;

switch (b) //assume b is always false (which it is)
{
    case FALSE:
        if (c == 0) {
            mvprintw(y, x, "^");
            refresh();

            for (j = 1; j <= i; j++) {
                mvprintw(y + j, x, ".");
                refresh();
            }
            break;
        }

        if (c == 1) //tried using else if, same result
        {

            mvprintw(y, x, "^");
            refresh();

            for (j = 1; j <= i; j++) {
                mvprintw(y - j, x, ".");
                refresh();
            }
            break;
        }
}
return 0;
}

【问题讨论】:

  • 您是否尝试过使用逐步调试器?你观察到了什么?
  • 不完全确定这是否可能(因为我在我的树莓派上编码)。请原谅我的无知,但我对所谓的“逐步调试器”并不熟悉。
  • @user20842454566 尝试学习使用 gdb,你作为 C 程序员的生活会轻松很多。

标签: c user-interface if-statement int case


【解决方案1】:

您的代码很可能会执行两次。赠品是您尝试了 if/else。在一次 if 语句的执行中,永远只会执行一个块。

【讨论】:

  • 根据您的回复,我仍然不明白如何解决我当前的问题,是否愿意扩展?
  • 在 if/else 语句中,代码编译(被翻译成计算机可以更好理解的语言)成代码,其中 不可能 (为了我们的论点)执行该语句的多个部分。我不知道您的程序做了什么,但它可能是您看到的时间条件,您的代码执行速度比您预期的要快,并且在您看到该输出之前已经多次通过该部分代码。也许在该语句之后暂停一下,以便您可以看到输出会有所帮助。
  • 假设您可以看到输出,在函数顶部的任何条件代码之外添加一个打印语句,您可以看到它被调用了多少次以及每次调用中发生的任何输出.
  • 如果我正确理解了您的评论,我在 moveC 函数的开头添加了一条 mvprintw 语句。该语句只打印一次,所以我假设它只被调用一次?
  • 如果你的其他字符打印多次,它怎么可能只打印一次?同样,不确定具体细节,但确保每次在 moveC 中打印测试线时更改打印内容。使用全局 int 并在打印之前递增。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多