バグは、「3だけで割り切れた」時と、「5だけで割り切れた」時に表示するメッセージが入れ替わっていることです。ソースコードを抜粋すると、次のようになります。
} else if ((i % 3) == 0) { printf("Buzz\n"); } else if ((i % 5) == 0) { printf("Fizz\n");
仕様には、「3の倍数の場合は、1〜100でなくFizzと表示する」「5の倍数の場合は、1〜100でなくBuzzと表示する」とあります。プログラムの抜粋箇所を見ると、3で割り切れた場合は、「Buzz」を、5で割り切れる場合、「Fizz」を表示し、仕様とは逆ですね。従って、print文を入れ替えれば、仕様通りになります。
今回の自己採点シートを下記に示します。
問題 | 内容 | 配点(点) |
---|---|---|
FizzBuzz問題 | 5分以上考えた | 40 |
メッセージのエラーに気がついた | 40 | |
上記以外のバグを見つけた | 20 | |
リスト3 自己採点シート |
今回は、伝説の「FizzBuzz問題」を取り上げました。みなさんはバグを見つけられたでしょうか。バグが起きると不可解な事象に当惑しますが、原因が分かると、案外、単純なミスだと気付きます。本コラムをきっかけにして、より高いレベルのエンジニアを目指していただければ幸いです。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.