実現したい事
C言語で日時を1文字ずつ取得し、日時を表示する関数を作成したいです。
該当のソースコード
C
1#include <stdio.h> 2#include <time.h> 3 4#define STX 0x02 /* テキスト開始 */ 5#define ETX 0x03 /* テキスト終了 */ 6 7static char str[] = "9999年99月99日 99時99分99秒"; 8static int int_c[] = { 0, 1, 2, 3, 6, 7, 10, 11, 16, 17, 20, 21, 24, 25}; /* 上の配列strの間接的な添え字 */ 9 10/* 11 名称 timer_data_1 12 引数 char timer_str:日時([STX]YYYYMMDDHHMMSS[ETX])の1文字 13 戻り値 無し 14*/ 15/*----- ここより下に解答を記述してください -----*/ 16void timer_data_1(char timer_str) 17{ 18 int i = 0; 19 int flag = 0; 20 21 if (timer_str == STX){ 22 flag = 1; 23 }else if (timer_str == ETX){ 24 printf("%c\n", str); 25 flag = 0; 26 }else if (flag = 1){ 27 str[int_c[i]] = timer_str + (i + 1); 28 i++; 29 } 30 31 return; 32} 33/*----- ここより上に解答を記述してください -----*/ 34 35int main(void) 36{ 37 time_t current; 38 struct tm *timer; 39 int tm_sec = 0; 40 char str[20]; 41 int i; 42 char *str_snd; 43 44 /* 乱数の初期化 */ 45 srand(time(NULL)); 46 i = rand() % 15; 47 48 while(1){ 49 current = time(NULL); 50 timer = localtime(¤t); 51 if(timer->tm_sec != tm_sec){ 52 *(str + 0) = STX; 53 sprintf(str + 1,"%04d%02d%02d%02d%02d%02d", 54 timer->tm_year + 1900, timer->tm_mon + 1, timer->tm_mday, 55 timer->tm_hour, timer->tm_min, timer->tm_sec); 56 *(str + 15) = ETX; 57 *(str + 16) = '\0'; 58 59 while(*(str+i)){ 60 timer_data_1(*(str + i)); 61 i++; 62 } 63 64 tm_sec = timer->tm_sec; 65 i = 0; 66 } 67 } 68 69 return 0; 70}
表示例
2020年07月16日 17時19分21秒
2020年07月16日 17時19分22秒
2020年07月16日 17時19分23秒
2020年07月16日 17時19分24秒
2020年07月16日 17時19分25秒
2020年07月16日 17時19分26秒
2020年07月16日 17時19分27秒
上のように1秒ずつ表示されるようにしたい
発生している問題・エラーメッセージ
コンパイルエラーは起きていませんが何も表示されません。関数内で、テキスト開始(STX)が来た時の処理、テキスト終了(ETX)が来た時の処理など上手く書けないでいます。どうすれば正しく表示させることができるのか教えてほしいです。
試したこと
関数部分のプログラムは一応書きました。表示例のようにならないけれど
カーソルだけ縦に1秒ずつ動いているのが確認できました。
個人的な考え
配列strの中に一文字ずつtimer_strの中身を入れて最後に文字としてまとめて表示するのかな?と考えています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/16 14:02 編集