バグは、「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問題」を取り上げました。みなさんはバグを見つけられたでしょうか。バグが起きると不可解な事象に当惑しますが、原因が分かると、案外、単純なミスだと気付きます。本コラムをきっかけにして、より高いレベルのエンジニアを目指していただければ幸いです。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
バグ検出ドリル(3)それでもプログラマーは数学を知っておくべきだ
バグ検出ドリル(1)「さあ、バグを見つけよう」
組み込みソフトがこの10年で変わったこと、変わらないこと
タダでソフト開発の生産性と品質を上げる方法(10):プログラムの実行速度を瞬時に測定する「gprof」Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク