言語はC言語を使っています。cygwinでコンパイル、実行しています。
今回出された課題が解けなくて、質問させていただきたいです。
課題の内容は、
「時間の長さ」を表す構造体 TIME を定義する.そのメンバーは次の通りですべて int型とする.
メンバー 内容 値の範囲
day 日数 0 以上
hor 時 0 から 23 まで
min 分 0 から 59 まで
この構造体 TIME 型の変数 t のメンバーの値が,
(t.day, t.hor, t.min) = (10, 30, 125)
であるとします.これは,「時間の長さ」t が(10日+30時間+125分)であることを意味します.ただし,時間と分が定められた範囲(それぞれ 23,59 以下)を超えていますので,両者をこの範囲に納めて,(11日+8時間+5分)と改めます.この結果 t のメンバーは:
(t.day, t.hor, t.min) = (11, 8, 5)
となります.このように,ある TIME型の変数のメンバーの値を定められた範囲に改めることを,その変数を正規化すると呼ぶことにします.
TIME型のポインタを引数とする int型の関数 time_set() を考えます.この関数は,
1.引数(ポインタ)の対象変数(この場合は TIME型変数)のメンバーのどれかに負の値があれば,ただちに0を返す.
2.メンバーがすべて0以上ならば,対象変数を正規化し,1を返す.
という機能を持ちます.また,この関数 time_set() の第1行を:
int time_set ( TIME *t )
と定めます.関数 time_set() を作成し,この関数を引用して,
1.TIME型変数のメンバー day,hor,および min の値をキーボードから読み込み,少なくともどれかひとつの値が負であれば,文字列 "Input again." を出力してふたたびキーボードからの入力を待つ.
2.読み込まれたすべてのメンバーが0または正ならば,それらのメンバーからなる TIME型変数を正規化し,得られた結果をディスプレイ上に出力する.
という動作をするプログラムを作成しなさい.
というものです。
一応私なりに、プログラムを作ってみたのですが、コンパイルすると、
problem7-4.c: In function `main':
problem7-4.c:30: error: parse error before "TIME"
problem7-4.c:32: error: parse error before "TIME"
と出てきて、実行できません。
どこがおかしいのか、ご指摘お願いしたいと思っています。
どうぞよろしくお願いします。
これは私の作ったプログラムです。
#include <stdio.h>
typedef struct {int day, hor, min;}TIME;
int time_set(TIME *t){
TIME time;
time = *t;
printf("day?");
scanf("%d",t->day);
printf("hor?");
scanf("%d",t->hor);
printf("min?");
scanf("%d",t->min);
if(t->day < 0 || 0 > t->hor || t->hor > 23 || 0 > t->min || t->min > 59){return 0;}
else {if(t->min > 59){t->min = t->min % 60;
t->hor = t->hor + t->min / 60;return 1;}
else if(t->hor > 23){t->hor = t->hor % 24;
t->day = t->day + t->hor / 24;return 1;}
else{return 1;}
}
}
int main(void){
TIME time,*p;
int i;
i = time_set(TIME *p);
while(i == 0){printf("Input again.\n");i=time_set(TIME *p);}
if(i == 1){printf("%d %d %d\n",p->day,p->hor,p->min);}
}