連載
バグ検出ドリル(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.