代码没有显示任何println arduino? (关于每种语言)

时间:2016-09-20 15:24:57

标签: c arduino primes

我已经尝试过各种语言:php,javascript和c以及ultmately arduino。
为什么不这个代码:

int n = 10;
int total = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  while (n < 100) {
    if (n % 2 != 0) {
      if (n % 3 != 0) {
        if (n % 4 != 0) {
          if (n % 5 != 0){
            if (n % 6 != 0) {
              if (n % 7 != 0) {
                if (n % 8 != 0) {
                  if (n % 9 != 0) {
                    total++;
                    n++;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  Serial.println(total);
}

除了什么之外?

2 个答案:

答案 0 :(得分:2)

这是因为您放置

的位置

n++;

在您的代码中,它位于最里面的范围内。

由于开始时n = 10,n%2!= 0为false,并且该范围内的所有内容,包括n ++;永远不会被称为。因此,n从不递增,因为n%2!= 0重复为假。因此,代码永远不会达到总计的打印,因为它被卡在无限循环中。

对代码的一种可能的修正如下。答案是21。但是,由于你已经在使用while循环,你可以把它放在setup()方法中,否则Arduino只会无限地打印21。

int n = 10;
int total = 0;

void setup() {
    Serial.begin(9600);
}

void loop() {
 while (n < 100) {
  if (n % 2 != 0) {
   if (n % 3 != 0) {
    if (n % 4 != 0) {
     if (n % 5 != 0){
      if (n % 6 != 0) {
       if (n % 7 != 0) {
        if (n % 8 != 0) {
         if (n % 9 != 0) {
          total++;
         }
        }
       }
      }
     }
    }
   }
  }
  n++;
 }
 Serial.println(total);
}



从您的目标/目的开始..

如果您发现10到100之间的数字不能除以2到9,则可能的编码方式可能是:

int n = 10;
int total = 0;

void setup() {
 Serial.begin(9600);
 while (n < 100) {
  if (n % 2 != 0) {
   if (n % 3 != 0) {
    if (n % 4 != 0) {
     if (n % 5 != 0){
      if (n % 6 != 0) {
       if (n % 7 != 0) {
        if (n % 8 != 0) {
         if (n % 9 != 0) {
          Serial.println(n);
          total++;
         }
        }
       }
      }
     }
    }
   }
  }
  n++;
 }
 Serial.print("Total: ");
 Serial.println(total);
}

void loop() {
 //Serial.println(total);
}

就个人而言,我更喜欢嵌套的IFs

int n = 10;
int total = 0;
bool divisible = false;
int i;

void setup() {
 Serial.begin(9600);
 while (n < 100) {
  divisible = false;
  for (i=2; i<=9; i+=1){
    if (n%i==0){
      divisible = true;
    }
  }
  if (divisible == false){
    Serial.println(n);
    total++;
  }
  n++;
 }
 Serial.print("Total: ");
 Serial.println(total);
}

void loop() {
 //Serial.println(total);
}

你会得到输出:

11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
Total: 21

希望它有所帮助。

答案 1 :(得分:0)

您的代码结构错误。每次循环都需要增加n

这应该有效:

void loop() {
  while (n < 100) {
    if (n % 2 != 0) {
      if (n % 3 != 0) {
        if (n % 5 != 0){
          if (n % 7 != 0) {
            total++;
          }
        }
      }
    }

    n++; /* Increment needs to be at the base of the loop! */
  }

  Serial.println(total);
}