連載
バグ検出ドリル(12)コンパイルエラーにならないコンパイルエラー:山浦恒央の“くみこみ”な話(112)(2/3 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第12回は、前回に引き続き「コンパイルエラー」がテーマです。コンパイルエラーにはならないのに、うまく動かないプログラムのバグを見つけ出してください!
3.今回の問題
問題文:リスト1に、バグ入りの「アルバイト社員の給料計算」プログラムを示す。リスト2に示す結果を期待したが、実際にはリスト3の実行結果を表示した後、ハングアップした。プログラムを修正し、リスト2の実行結果となるように修正せよ。なお、本問題ではリスト2の入力パターン以外は考慮しないこと。
/* SalaryCalc.c アルバイト社員の給料を計算するプログラム 仕様1:名前、一日の勤務時間、勤務時間帯を入力する。 仕様2:勤務時間帯が通常勤務場合は、基本給 * 勤務時間とし、 勤務時間帯が深夜勤務の場合は、深夜基本給 * 勤務時間とする。 */ #define BASE 1000 #define NIGHT_BASE 1100 #include <stdio.h> int main(void){ char name[128]; //名前 int time = 0; //時間 int zone = 0; //時間帯 int salary = 0; //通常勤務は0、深夜勤務は1 //給料の算出 printf("名前を入力してください\n"); scanf("%s",name); printf("勤務時間を入力してください\n"); scanf("%d",&time); printf("勤務時間帯を入力してください\n"); printf("通常勤務:0 深夜勤務;1\n"); scanf("%d",zone); if (zone = 0) { salary = BASE * time; } else { salary = NIGHT_BASE * time; } printf("本日の%sさんの給料は: %d円です\n",name, salary); return 0; }
リスト1 アルバイトの給与計算プログラム(C言語)
名前を入力してください 山田博之 勤務時間を入力してください 10 勤務時間帯を入力してください 通常勤務:0 深夜勤務;1 0 本日の山田博之さんの給料は: 10000円です
リスト2 期待した実行結果
名前を入力してください 山田博之 勤務時間を入力してください 10 勤務時間帯を入力してください 通常勤務:0 深夜勤務;1 0
リスト3 実際の実行結果
Copyright © ITmedia, Inc. All Rights Reserved.