C言語で ミニ日記アプリを作ろう!(1)

スポンサーリンク
コンピューター C言語

これからC言語で簡単な「ミニ日記アプリ」を作っていこう。
最初は、最低限の機能(入力と表示)のみを装備するが、徐々に機能を追加していく。

機能の概要

  • ユーザーが日記の内容を入力する。
  • 現在の日時を取得(time.hを使用)する。
  • 日記内容と日時をファイルに追記(aモード)する。
  • 終了時に「保存しました。」と表示する。なお、入力がない場合「入力が空です。保存しません。」と表示する

使用する主な関数・ライブラリ

機能関数・ライブラリ
日時取得time(), localtime(), strftime()
ファイル操作fopen(), fprintf(), fclose()
入力処理fgets()
#include <stdio.h>
#include <time.h>
#include <string.h>

int main(void) {
    char diary[1024];
    time_t now = time(NULL);
    struct tm *t = localtime(&now);
    char timestamp[100];
    strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", t);

    printf("今日の日記を入力してください(Enterで終了):\n");
    if (fgets(diary, sizeof(diary), stdin) == NULL) {
        fprintf(stderr, "入力に失敗しました。\n");
        return 1;
    }

    // 改行を取り除く
    size_t len = strlen(diary);
    if (len > 0 && diary[len - 1] == '\n') {
        diary[len - 1] = '\0';
    }

    // 空文字列ならスキップ
    if (strlen(diary) == 0) {
        printf("入力が空です。保存しません。\n");
        return 0;
    }

    FILE *fp = fopen("diary.txt", "a");
    if (fp == NULL) {
        perror("ファイルを開けませんでした");
        return 1;
    }

    fprintf(fp, "[%s]\n%s\n\n", timestamp, diary);
    fclose(fp);

    printf("日記を保存しました。\n");
    return 0;
}

実行結果

>今日の日記を入力してください(Enterで終了):

入力が空です。保存しません。

>今日の日記を入力してください(Enterで終了):
今日はとても暑い日です。
日記を保存しました。
>cat diary.txt 
[2025-08-03 09:41:12]
今日はとても暑い日です。

なお、Windows版のVSCodeでコンパイルして、ターミナルウインドウ(UCRT64)で日本語の文字化けが発生する場合、以下のコードを試していただきたい。

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <locale.h>

int main(void) {
    setlocale(LC_ALL, "ja_JP.UTF-8");

    char diary[1024];
    time_t now = time(NULL);
    struct tm *t = localtime(&now);
    char timestamp[100];
    strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", t);

    printf("今日の日記を入力してください(Enterで終了):\n");
    if (fgets(diary, sizeof(diary), stdin) == NULL) {
        fprintf(stderr, "入力に失敗しました。\n");
        return 1;
    }

    size_t len = strlen(diary);
    if (len > 0 && diary[len - 1] == '\n') {
        diary[len - 1] = '\0';
    }

    if (strlen(diary) == 0) {
        printf("入力が空です。保存しません。\n");
        return 0;
    }

    FILE *fp = fopen("diary.txt", "a");  // ← "ab" から "a" に変更
    if (fp == NULL) {
        perror("ファイルを開けませんでした");
        return 1;
    }

    fprintf(fp, "[%s]\n%s\n\n", timestamp, diary);
    fclose(fp);

    printf("日記を保存しました。\n");
    return 0;
}

今後は、このコードを基に機能の拡張を行っていこう。

コメント

タイトルとURLをコピーしました