前提・実現したいこと
日付を扱うプログラムを作っていまして、最初は普通の配列やら構造体を使っていたのですが、tm構造体というのがせっかくあるのだからそれを使ってしまおうと思ったのが運の尽きで、思った通りの動作ができず困っております。「そもそもそのコードのようなことをtm構造体でやるもんじゃない」というのでしたら仕方がないですが、どうにかモノにしたいです・
発生している問題
数値を入力しても、結果が出ません。
ソースコード
C
1#include <stdio.h> 2#include <string.h> 3#include <ctype.h> 4#include <stdlib.h> 5#include <time.h> 6#include <math.h> 7 8void mjd2data(int mjd, struct tm *data){ 9 int n, a, b; 10 //printf("n=%d",n); 11 a=4*n +3 +4*floor( 3/4.0* floor( 4*(n+1)/146067.0 ) ); 12 b=5*floor(a%1461/4.0 )+2; 13 data->tm_year=floor(a/1461.0); 14 data->tm_mon =floor(b/153.0)+3; 15 data->tm_mday=floor(b%153/5.0)+1; 16 if(12 < data->tm_mon ){ 17 data->tm_year+=1; 18 data->tm_mon-=12; 19 } 20 21} 22 23void main(){ 24 int mjd; 25 struct tm *data; 26 char *a; 27 scanf("%d",&mjd); 28 mjd2data(mjd,data); 29 puts("hoge"); 30 printf("%4d/", data->tm_year); 31 printf("%2d/", data->tm_mon); 32 printf("%2d ", data->tm_mday); 33}
試したこと
*つけたり&つけたりしてみましたけど、表示されなかったり、表示されてもおかしな値だったりしました。
補足情報(FW/ツールのバージョンなど)
Win10 MinGW
追記
nmoa氏、pepperleaf氏の回答の通り修正しましたらできました。
しかしtoshi17922062氏の指摘の通り、ポインタが、あやふやなところが多いです。
実体やらなんやらがちょっとしっくりこないので修正の理由?がわからないですね。
回答2件
あなたの回答
tips
プレビュー