大阪大学大学院基礎工学研究科 身体運動制御学グループ 西川研究室

プログラミングメモ

他人のことを考えてコードを書く

プログラムは書ければいい、実行できればいいではダメです。
例えばプログラムを実行してみて

...

となにも文字や指示が出てこなければ正常に動作しているかすらわかりません。
例えば0からnまでの和を求めるプログラムで自然数 n を入力してほしいなら
------------------------------
0からnまでの和を求めます
自然数nを入力してください
n = _
------------------------------
くらいの説明をいれましょう。

またコードの中にも適宜コメントを挟んで誰が見てもわかり易いものを作るように心がけましょう。
もちろん適切な変数名、インデント、関数化、マクロ定義など簡潔なコードを作れるようになりましょう。
このように癖を付けるとコンパイルエラーや実行中に何かバグがあった場合の原因を探すときにも助かります。
いくら自分が書いても、その場の思い付きで書いていると後から見てわからなくなりますよ。

scanf()を軽々使わないように

標準入力 (stdin;通常はコマンドライン) から文字列を読み込むことができる便利な関数"scanf()"ですが
意図した型以外の文字が入力されると途端に役立たずになります。
(ためしに全然違う型を入力してみてください。たいがいバグがでます)
そこでfgets()とsscanf()を組み合わせた方法がお薦めです。

まずfgets()でコマンドラインから文字列を1行文まるまる読み込みます。
次に読み込んだ文字列をsscanf()で好きな型 (int, doubleなど) に変換します。
このとき変換が失敗するとsscanf()の返り値で0を返します (正確には少し違いますが) 。
これを利用してエラー処理をした方がバグがでにくくなります。

下のページにも課題1のページにも詳しく書いてあったので参考にしてみてください。
scanf, fsanfは使わずfgets, sscanfのペアを使う:
"www.6809.net/tenk/html/cgokai/scanf.htm"

コンパイルの-Wallオプション

コマンドラインでコンパイルする際におそらく多くの人が
gcc -o test test.c
としてると思いますが
gcc -o test test.c -Wall
のように"-Wall"を付けると細かいところまで警告を出してくれます。
提出プログラムはこのオプションを付けても警告が出ないようにして提出してください。

リンク