C++で書いたこのコードをC言語に書き換える場合、classやオペレーターに代わる簡潔な書き方を教えていただきたいです。
C++
1#include <iostream> 2 3//y年がうるう年か判定する関数 4bool is_leap_year(int y) 5{ 6 return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; 7} 8 9//y年m月に含まれる日数を計算する関数 10int num_days_in_month(int y, int m) 11{ 12 int days = 0; 13 if (is_leap_year(y) == true && m == 2) 14 { //うるう年で2月のとき 15 days = 29; 16 } 17 else if (is_leap_year(y) == false && m == 2) 18 { //うるう年ではない2月 19 days = 28; 20 } 21 else if (m == 4 || m == 6 || m == 9 || m == 11) 22 { //4月、6月、9月、11月のとき 23 days = 30; 24 } 25 else 26 { //上記以外 27 days = 31; 28 } 29 return days; 30} 31 32//日数を表現するクラス 33struct Date 34{ 35 int years; //年 36 int month; //月 37 int day; //日 38 39 //日付をn日進める関数 40 void advance(void) 41 { 42 day += 15; 43 while (day > num_days_in_month(years, month)) 44 { //その月の日数よりdayが小さくなるまで繰り返す(dayは減っていく) 45 day -= num_days_in_month(years, month); 46 if (++month > 12) 47 { //12月までいったら1月に戻る 48 years++; 49 month = 1; 50 } 51 } 52 } 53}; 54 55//Dateに対する入力用の演算子 56std::istream &operator>>(std::istream &in, Date &d) 57{ 58 in >> d.years >> d.month >> d.day; 59 return in; 60} 61 62//Dateに対する出力用の演算子 63std::ostream &operator<<(std::ostream &out, Date d) 64{ 65 out << d.years << "年" << d.month << "月" << d.day << "日"; 66 return out; 67} 68 69int main() 70{ 71 Date d; //日付クラス 72 int n; //n日後 73 Date day; 74 std::cout << "日付を入力してください\n"; 75 std::cin >> d; 76 //std::cout<<"何日後ですか n:\n"; 77 //std::cin>>n; 78 79 std::cout << d << "の15日後は"; 80 d.advance(); 81 std::cout << d << "です\n"; 82 83 return 0; 84} 85
Cは直接関係しますか? <質問タグ
Cに書き換えたほうが簡潔ならCに書き換えたいと思い質問させていただきました。
それよりもオペレーターやクラスに代わる書き方をしてC++でも簡潔に書き表せるのならその方法も教えていただきたいと思った次第です。
Cの質問タグは取り消したほうがよろしいのでしょうか?
現在のコードにおける問題を明示された方が良いかとは思いますが(なんか丸投げっぽいし)、関係するかしないかで決めたら良いかと。
書かれてないことは伝わらないので、提示コードと直接関係ないのであれば、タグをつけた意図もあったほうが良いかと思います。
※私自身は「プログラミング言語」のみタグ登録しているユーザーなので直接のアドバイスは難しいですが
あ、すみません。読み違えました。
「C言語に書き換えたい」とタイトルにありましたね。
いずれにしても、まず自身がやってみることからと思います。質問内容から、特に何も試してなく、問題も起きてないので。
自分なりに書き換えて実行したのですが、エラー文が出ました。なぜお伝えしたのかというと丸投げだととらえているようだからです。なぜ載せていないのかというと、エラー文がかなりの量で、回答していただける方が拝見した際に、見づらくなってしまうのではという可能性を考えたからです。確かに、そうとらえる方もあなたのようにいらっしゃると思うので追記しておこうと思います。何分最近こちらのサイトを利用し始めたので質問の仕方に多少不備があることはご了承ください。ご指摘ありがとうございました。もしまた質問に不備がありましたら、助言をくださるとうれしいです。
何もないよりあったほうが良いですよ。
なければ見づらい云々すら判断できないわけですから。
エラーはひとまず一部抜粋としてコードだけでも全部提示した方が良いです。
細やかなところまでのご指示ありがとうございます。
質問は編集できますので。
ありがとうございます。
回答3件
あなたの回答
tips
プレビュー