• ベストアンサー

C言語でのプログラミングについて。

C言語でのプログラミングについて。 プログラミング初心者です。年月日をパソコン本体から取得する方法が知りたいです。 具体的には、 int_year,month,day; year=○○○○; month=○○; day=○○; のような形にして、○の所にプログラムが自分で引っぱってくるようにしたいです。 初心者で分からない事だらけです。ご協力おねがいします。

noname#247928
noname#247928

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

C言語で、現在の年月日を取得するには、time.h を include し、 time()、localtime()を使います。 ANSI 互換のコンパイラなら、概ね使えるはずですよ。

noname#247928
質問者

お礼

具体的なアドバイス助かります。これをヒントに色々やってみます。 回答ありがとうございました。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

標準ライブラリの time.h をincludeすることで使用できる関数で可能です。 マニュアルや参考書に載っているはずなので確認してみてください。

noname#247928
質問者

お礼

まだ手探り状態なので、time.hをヒントにまた頑張ってみます。 回答ありがとうございました。

  • neko1963
  • ベストアンサー率49% (127/258)
回答No.1

C言語標準の機能としては無いと思いますが、通常はCのコンパイラによって日付や時刻を取得する関数が用意されていると思います。 ※Cコンパイラ製品の仕様に依存する部分だと思います Cでの開発ソフト/コンパイラをお持ちであれば、その製品名を具体的に書かないと答えようが無いと思います。

noname#247928
質問者

お礼

コンパイラが関係しているとは知りませんでした。そこを踏まえてまた調べてみます。 回答ありがとうございました。

関連するQ&A

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語を学習していてつまづいたので、皆さんの意見を聞きたいと思います。 現在、カレンダーを表示するプログラムをつくっています。 Yearとmonthをユーザが入力すると、その年その月のカレンダーが出るという算段です。(画像貼っておきます。ソースコードは下) これはできました。 これをいじって、Yearをユーザから受け取ると、その年の1月から12月までのカレンダーがば~っと表示されるようにしろ、と言われました。 Yearとmonthを受け取って書くやつは友人の助けを得ながらなんとかかけましたが、もう無理です。多分、for文を使うんだと思うんですが……助けてください! #include <stdio.h> int dayofweek(int year, int month); int daysinmonth(int year, int month); int daysinyear(int year); void showcal(int dow, int days); int main(void) { int year, month; int dow; int dim; printf ("Year?: "); scanf ("%d", &year); printf ("Month?: "); scanf ("%d", &month); dow = dayofweek(year, month); dim = daysinmonth(year, month); showcal(dow, dim); return 0; } void showcal (int dow, int days) { int i, j, d; printf ("Su Mo Tu We Th Fr Sa\n"); d = 1; for (i = 0; i < dow; i++) { printf (" "); } for (; i < 7; i++) { printf (" %d ", d); d++; } printf("\n"); for (j = 0; d <= days; j++) { for (i = 0; i < 7 && d <= days; i++) { if (d < 10) printf (" %d ", d); else printf ("%d ", d); d++; } printf("\n"); } } int daysinmonth( int year, int month) { int dim; dim = 31; if (month == 4 || month == 6 || month == 9 || month == 11) dim = 30; if (month == 2) { if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) dim = 29; else dim = 28; } return dim; } int daysinyear( int year) { int diy; if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) diy = 366; else diy = 365; return diy; } int dayofweek (int year, int month) { int dow; int days; int y, m; if (year >= 2000) { days = 0; for ( y = 2000; y < year; y++ ) { days = days + daysinyear(y); } for ( m = 1; m < month; m++ ) { days = days + daysinmonth(year, m); } dow = (6 + days) % 7; } else { days = 0; for ( m = month; m <= 12; m++ ) { days = days + daysinmo

  • C言語プログラミング試験でわからない問題

     6月にあるC言語プログラミング処理検定2級を受験するのですが  サンプルでネット上で公開されている問題で行き詰っている問題  があり教えてほしいです。  http://www.sikaku.gr.jp/js/sample/cp2-3.pdf  問4にある問題を  VisualC++を使用して、デバックしながら、中身の  変数を確認したいのですが、このままだとエラー  になってしまいコンパイルできません。  これを、C++で確認するために、ソースコードを  どう変えたらいいか教えてほしいです。  ちなみにpdfの中身は  struct hizuke{ int year; /*年*/ int month;/*月*/ int day; /*日*/ }date_1,*date_2=&date_1; です。C言語でコンパイルするためにソースどう書き換えたら いいのか教えてください。  

  • C言語でのカレンダープログラミングについて。

    今、C言語でカレンダーについてのプログラミングを行っています。 まず月を入力し表示させる。 その年がうるう年かどうか判定させる。 日曜~土曜を表示し、指定した月の日数を曜日に合わせて表示させる。 2008年1月1日は火曜日。 という事実を利用してよい。 という条件で、うるう年かの判定はあるものの年は2008年で固定です。 曜日、指定した月の日数を出すところまでいきましたが。 曜日に合わせて出す事ができません。 今は1月に合わせて、1日が火曜日のところに出るように配置してます。 が、次の週になったときにどのように改行指定すればいぃのかわりません。 また、来月以降の月初めの曜日指定もわからないです。 途中までのプログラムはこれです。 醜いかもしれませんが。 #include <stdio.h> int main(void) { int year=2008; int month,hantei=0,a,b,c; int uru[12]={31,29,31.30,31,30,31,31,30,31,30,31};/*うるう年の時の各月ごとの日数*/ int normal[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*通常の年の各月ごとの日数*/ printf("表示させる月を入力してください。:"); scanf("%d",&month); if(year%4==0||year%100==0||year%400==0) { hantei=1;/*その年がうるう年かどうかを判定し、うるう年なら「hantei」に「1」が代入*/ } if(hantei==1)/*うるう年の場合。*/ { printf("%d年 %d月\n",year,month); printf("%d日\n",uru[month-1]); } else/*通常の年の場合。*/ { printf("%d年 %d月\n",year,normal[month-1]); printf("%d\n",normal[month-1]); } printf("日 月 火 水 木 金 土\n");/*曜日*/ if(hantei==1)/*うるう年の場合*/ { for(b=0;b<=7;b++) { printf(" ");/*火曜日のところまでスペースを空ける*/ } for(c=1;c<=uru[month-1];c++)/*日数表示*/ { printf("%2d ",c); } } return(0); } まだあまりC言語に詳しくないので、簡単に説明できる範囲で御願いします。 説明がわかりにくいかもしれませんが、すいません。

  • 日付の差分の求め方(日、分)

    NT4WS+VC++6.0 Win32コンソールアプリで作ってます。 現在int型で year1,month1,day1 year2,month2,day2 の様に、1と2それぞれ年月日を持っています。 (year2/month2/day2) - (year1/month1/day1) と言った感じで1と2の差が何日かを求めたいのです。 VBで言うDateDiffみたいなことがやりたいのです。 よろしくお願いします。

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • c言語のプログラミングでこまってます

    /* プログラム作成に当たっては以下の注意を守ること。 •入力は整数変数に格納し、有効な日付かどうかチェックせよ。 •日付チェックでは、月の最終日が月によって違うことも考慮にいれること。 •日付チェックにおけるif文を減らすため、daynum[]を必ず使うこと。 •日付チェック以外でも、if文やswitch-case文の数はなるべく少なくするよう工夫せよ。今回は、if文の7行並列も、12行並列も禁止。 •日付の範囲チェックと計算とを同時に実行してもよい。 2個の整数を入力し、それぞれを2011年度の月、日とみなして、 その日付からおよその月齢と月相を計算して表示するプログラムを作成せよ。 月齢と月相の対応は簡便的に3.75齢毎に相が進むとしてよい。 suuumは月齢であるが、計算は以下のもので間違いない。 また、以下の配列を定義して使うこと。 char moonphasename[][15]= {"new moon", "new crescent", "first quarter", "waxing gibbous", "full moon", "waning gibbous", "last quarter", "old crescent"}; */ #include <stdio.h> int main(void) { int daynum[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int i=0,j=0; /*15はもじすう+1*/ char moonphasename[][15]= {"new moon", "new crescent", "first quarter","waxing gibbous", "full moon", "waning gibbous", "last quarter", "old crescent"}; int month,day,sum,suum,suuum; printf("月と日付を入力してね:"); scanf("%d%d", &month, &day); if(day>daynum[month]){ printf("2011年にそんな日はありません"); return(-1); } sum=(2011-1740)*210; suum=((sum/19)-2)+month+day; if(month==1) suuum=suum+1; else if(month==2) suuum=suum+2; else if(month==3 ||month==5) suuum=suum-1; else suuum=suum; printf("月齢は%d",suuum%30); for(i=0; i<=suuum &&suuum<i+3.75 ; i=i+3.75){ printf("月相は",moonphasename[j][15]); j++ ; } return (0); } と書いてリナックスのeclipsで実行させました。月齢はでるのですが、月相が表示されません(月相は という文字も非表示)。 どうしたらいいでしょうか? また、最後のfor文ではsuuumが0から3.75のときしか反応しません(見ての通り)。どう書き直せばいいでしょうか? 詳しいかたおねがいします。

  • C言語のプログラミングについて

    C言語のプログラミングについて プログラミング初心者です。下のプログラムに詰まりました。 下のプログラムをfgets()、atoi()の組とgetchar()を用いて表示するにはどのようなプログラムを書けばよろしいのでしょうか? % ./descending 正の整数: 10 英文字: z 1: z 2: y 3: x 4: w 5: v 6: u 7: t 8: s 9: r 10: q %

  • C言語について

    #include <stdio.h> #include <string.h> #include <time.h> typedef struct { int day; double dist; char comment[32]; } diary; void writeData(char datafile[]); void viewData(char datafile[]); char datadir[] = "dat/"; int year, month, day; int main(int argc, char* argv[]) { char datafile[11]; struct tm *date; time_t now; now = time(NULL); date = localtime(&now); year = date->tm_year + 1900; month = date->tm_mon + 1; day = date->tm_mday; sprintf(datafile, "walk%04d%02d", year, month); if ((argc > 1) && (strcmp(argv[1], "-view")==0)) { viewData(datafile); } else { writeData(datafile); } return 0; } void writeData(char datafile[]) { diary today_data; FILE *outfp; //出力ファイルのファイルポインタ char y_n = 'n'; char filename[15]; char input_str[12]; printf("%d/%d/%dの記録をしますか? (y/n) > ", year , month, day); scanf("%c", &y_n); while (getchar() != '\n') { } if(y_n != 'y') { printf("記録する日付は?(例:%d %d %d) > ", year, month, day); year = 0; month = 0; day = 0; gets(input_str); sscanf(input_str, "%d %d %d", &year, &month, &day); if((year > 9999) || (month > 12) || (month < 1) || (day > 31) || (day < 1)) { printf("日付が正しくありません\n"); return; } sprintf(datafile, "walk%04d%02d.txt", year, month); } today_data.day = day; printf("距離は? > "); scanf("%lf", &today_data.dist); while (getchar() != '\n') { } printf("コメントは?(30文字以内) > "); fgets(today_data.comment, 32, stdin); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { while (getchar() != '\n') { } } sprintf(filename, "%s%s", datadir, datafile); if((outfp = fopen(filename, "a+")) == NULL) { printf("ファイルオープンエラー\n"); return; } fprintf(outfp, "%d %.2lf ", today_data.day, today_data.dist); if((strlen(today_data.comment) == 31) && (today_data.comment[30] != '\n')) { today_data.comment[30] = '\n'; today_data.comment[31] = '\0'; } fprintf(outfp, "%s", today_data.comment); fclose(outfp); printf("記録しました"); } void viewData(char datafile[]){ } このソースの char datadir[] = "dat/";この宣言はディレクトリを指しているんですよね? この場合の/はどおいう意味ですか? 教えてください

  • C言語で3次元配列を使い一年分のカレンダーを作成

    C言語課題で「三次元配列を定義して、与えられた年の1年間分のカレンダーを作成する」という課題があるのですが三次元配列を使い一年分のカレンダーがなかなか出来ません。 教えていただけるとありがたいです。 どうかよろしくお願いします!!!! 現状はこの状態です。 #pragma warning(disable:4996) #include <stdio.h> #define WEEK 6 enum M_LIST { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, N_MONTH }; enum W_LIST { SUN, MON, TUE, WED, THU, FRI, SAT, N_WEEK }; char *weekday[] = { "日,月,火,水,木,金,土" }; //曜日 int mday[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //各月の日数 /*プロトタイプ宣言*/ int monthday(int year); void karenda(int total); /*メイン*/ void main(void) { int year; printf("西暦を出力"); scanf("%d", &year); //年度の出力 karenda(monthday(year)); } /*求める月の前月までの総日数*/ int monthday(int year) { int total = 0; /*求める年の前年までの総日数を求める*/ total = (((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1); /*うるう年の日数*/ if ((year % 4) == 0 && (year % 100) != 0 && (year % 400) == 0)mday[FEB] = 29; { } return total; } /*カレンダー*/ void karenda(int total) { int month, week, day; int box = total % 7; char cal[N_MONTH][WEEK][N_WEEK]; //3次元配列の宣言 for (month = 0; month < N_MONTH; month++) { printf("%d\n", (month + 1)); //月を入力 for (week = 0; week < WEEK; week++) { for (day = 0; day < N_WEEK; day++) { if (day < box){ printf(" "); } } } } } よろしくお願いします。

  • これまた初歩的なことかもしれませんが^^;

    Cです。今作成中の、カレンダーを表示させるプログラムの一部なのですが、それを以下に書きます。 ――――――――――――――― int day_of_week(int year, int month, int day) { int a, i, days1 = 0, days2 = 0, alldays, wk; a = (year - 1)/4; days1 = a * 366 + (year - 1 - a)*365 - (year - 1)/100 + (year - 1)/400; for(i=1; i< month ; i++) days2 += day_of_month(year, i); alldays = days1 + days2 + day; wk = alldays % 7; return(wk); } int write_cal(int year, int month) { /* !!! */ } ――――――――――― 関数write_calで、関数day_of_weekの戻り値wkをつかいたいのですが、!!! にそのままday_of_week(int year, int month, int day)を入れると当然コンパイルエラーになります。初歩的なことをわすれているのかもしれませんが、ポインタなどもつかっていいのでやりかた教えてください! int write_cal(int year, int month, int day) にするというのはナシでお願いします