C言語について
main関数のところでscanfを使って誕生日を入力して、ユーザー定義で、入力された数字が誕生日に適しているか(13月とか32日と打たれてないか)を判断する。
もし適しているなら1、正しくないなら1以外を返す。という課題を出されたのですがユーザー定義で複数の戻り値を返すのは可能なのですか?そもそも1で返すとか1以外で返すとかの意味がわかりません。ポインタは使わないものとしてください。
先生に聞いても教えてくれませんでした。
ユーザー定義でわからないところがあります
Re: ユーザー定義でわからないところがあります
入力された日付が正しい形式かそうでないかによって、1か1以外(例えば777)のいずれか一方を返せば良いということで、戻り値は1つだと思いますよ。
Re: ユーザー定義でわからないところがあります
複数の戻り値を返すのは不可能だと思いますが、複数の値がセットになった構造体を返すことはできます。あっくん さんが書きました:ユーザー定義で複数の戻り値を返すのは可能なのですか?
1を返すとか1以外を返すとかの間違いでしょう。あっくん さんが書きました:そもそも1で返すとか1以外で返すとかの意味がわかりません。
ポインタを使わずに標準関数のscanfを使って入力を得るのは不可能です。あっくん さんが書きました:ポインタは使わないものとしてください。
関数を呼び出してもいいなら(()演算子を用いた関数の呼び出しは、関数を指すポインタを使います)、getchar関数を用いて入力を読み込み、「scanf」はローカル変数にでも使うといいでしょう。
()演算子を用いた関数呼び出しに必要なポインタの使用もだめなら、インラインアセンブラを用いるといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ユーザー定義でわからないところがあります
1を返す、1以外を返すという理解は出来ました。ただどの値を返せばいいのかがわからないです。戻り値があるということはなにか計算が必要なのですか?だとしたらifの中には何が入るのでしょうか
Re: ユーザー定義でわからないところがあります
正しければ1をあっくん さんが書きました:1を返す、1以外を返すという理解は出来ました。ただどの値を返せばいいのかがわからないです。戻り値があるということはなにか計算が必要なのですか?だとしたらifの中には何が入るのでしょうか
正しくなければ1以外の任意の値(1じゃなければ何でもよい)を
返すようにすればよいのでは?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: ユーザー定義でわからないところがあります
うーむ、確かに使用する暦が指定されていないので、わからないですね。あっくん さんが書きました:ただどの値を返せばいいのかがわからないです。
仮にグレゴリオ暦を使えばいいとしても、閏年(2月29日)をどうするか、そもそも入力する「誕生日」に年が入るかどうかがわからないので、わからないですね。
そもそも、一般の日付じゃなくてわざわざ「誕生日」と指定されているということは、何が特別な判定が必要なのかな…?
日本や世界の法律などについて調べないといけないのかな…?
戻り値があっても、計算が必要だとは限りません。あっくん さんが書きました:戻り値があるということはなにか計算が必要なのですか?
今回は不適切でしょうが、例えば常に0を返す実装も考えられます。
「ifの中」とは何ががよくわかりませんが、多分条件式と、条件式が真(0と等しいとみなせない)の時に実行する式またはブロックでしょう。あっくん さんが書きました:だとしたらifの中には何が入るのでしょうか
条件式が偽(0と等しいとみなせる)の時に実行する式またはブロックも入るかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ユーザー定義でわからないところがあります
// 誕生日の入力時に年は入力しない(つまり、閏年の判定は不要な)前提
#include <stdio.h>
int chk_date(int m, int d)
{
// 年は入力しないという前提なので、2月は29日まであるとする
int days[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 月が1~12の範囲になければアウト(0を返す。1でなければ何でもいい)
// 月が1~12の範囲にあっても、日が1~当該月の末日の範囲になければアウト(0を返す。1でなければ何でもいい)
// 月の範囲も日の範囲も正しければ、1を返す
return (m < 1 || 12 < m) ? 0 : (d < 1 || days[m] < d) ? 0 : 1;
}
int main(void)
{
int month, day;
printf("誕生日を、月 日の形式で入力してください:");
scanf("%d%d", &month, &day);
printf("正し%sい日付です\n", chk_date(month, day) == 1 ? "" : "くな");
return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。