按位表达式作为for循环条件

时间:2018-03-24 21:09:56

标签: c for-loop expression

我的代码的目标是打印从0到20的所有偶数。而不是使用模数运算,我尝试使用按位运算符&来查找偶数。我的代码问题是我收到此消息“暂停:命令未找到”。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int j;
  for (j = 0; j <= 20 && (j & 1); ++j)
  {
    printf("%3d\n", j);
  }

  system("pause");
  return 0;
}

4 个答案:

答案 0 :(得分:3)

为什么不保持简单并增加2并使用getchar而不是暂停

for (j = 0; j <= 20; j += 2)
{
    printf("%3d\n", j);
}

char ch = getchar();

答案 1 :(得分:2)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int j;
  for (j = 0; j <= 20; ++j)
  {
    if (!(j & 1)) printf("%3d\n", j);
  }

  printf("Enter a number to continue");
  scanf("%d",&j);
  return 0;
}

问题是你将&表达式作为循环条件的一部分,它会提前终止循环。

然后计算机抱怨系统暂停的事情,所以我把它更改为请求键盘输入........这会给你想要的暂停......但继续阅读,因为有一个你应该看到的改进...

或者在@ usr2564301

的建议之后可能更好
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char ch;
  int j;
  for (j = 0; j <= 20; ++j)
  {
    if (!(j & 1)) printf("%3d\n", j);
  }

  printf("Hit <enter> to continue");
  ch=getc(stdin);
  return 0;
}

这是更好的做法,因为scanf可能有点脆弱。

答案 2 :(得分:1)

问题与你的循环无关,它是system("pause")。那就是试图执行暂停命令,暂停命令在您的计算机上不存在(或者至少,它不在您的$ PATH中)。

我不确定您是否尝试使用该行,但如果删除它,您的代码应该可以正常工作。

答案 3 :(得分:0)

system("pause");仅适用于Windows。它不一定在其他操作系统上可用。