Dlang 中的 FizzBu​​zz

FizzBuzz in Dlang

我正在尝试让 fizzbuzz 在 D 中工作,但我终究不知道问题出在哪里。我试过颠倒逻辑,当它不合适的时候它确实会写两个词,但是当它合适的时候它什么都不写。

这是输出内容的屏幕截图:http://puu.sh/p67Hd/2a5a598b1b.png

import std.stdio;

void main() {
    for (uint i = 0; i < 100; i++) {
        if (i%5 && i%3) write(i);
        if (!i%3) write("Fizz");
        if (!i%5) write("Buzz");
        writeln();
    }
}

原因是operator precedence in D.

if(!i%3) 实际上会被解释为 if((!i)%3),这会导致 0%3(错误)或 1%3(正确)。如果 n 为 0,!n 将得到 1,否则它将始终为 0。因为它是从 0 到 100,所以 (!i) % 3 只会在开始时为真一次。这就是输出开始时出现 FizzBu​​zz 的原因。

所以您的代码应该如下所示:

import std.stdio;

void main() {
    for (uint i = 0; i < 100; i++) {
        if (i%5 && i%3) write(i);
        if (!(i%3)) write("Fizz");
        if (!(i%5)) write("Buzz");
        writeln();
    }
}

! 运算符优先于 %,因此您的 if 语句看起来像

if ((!i) % 3) write("Fizz");
if ((!i) % 5) write("Buzz");

并且因为所有 i 都是非零的(除了第一次),!i 总是 0 并且 0 % 50 % 3 是总是 0 (false)

要修复,您需要做的就是在 % 操作周围添加括号

if (!(i % 3)) write("Fizz");
if (!(i % 5)) write("Buzz");