質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.43%

  • C++

    3934questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    2088questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++においてx座標を一定の時間おきに出力したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 97

muton

score 14

該当のソースコード

cGrBoard::grDispCarBoard1(tCarElt *car, tSituation *s)
{
    int  x, x2, y;
    const int BUFSIZE=256;
    char buf[BUFSIZE];
    float *clr;
    int dy, dy2, dx;

    x = 10;
    x2 = 110;
    dy = GfuiFontHeight(GFUI_FONT_MEDIUM_C);
    dy2 = GfuiFontHeight(GFUI_FONT_SMALL_C);
    y = Winy + Winh - dy - 5;
    snprintf(buf, BUFSIZE, "%d/%d - %s", car->_pos, s->_ncars, car->_name);
    dx = GfuiFontWidth(GFUI_FONT_MEDIUM_C, buf);
    dx = MAX(dx, (x2-x));

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
    glBegin(GL_QUADS);
    glColor4f(0.1, 0.1, 0.1, 0.8);
    glVertex2f(x-5, y + dy);
    glVertex2f(x+dx+5, y + dy);
    glVertex2f(x+dx+5, y-5 - dy2 * 12 /* lines */);
    glVertex2f(x-5, y-5 - dy2 * 12 /* lines */);
    glEnd();
    glDisable(GL_BLEND);

    GfuiPrintString(buf, grCarInfo[car->index].iconColor, GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB);
    y -= dy;

    dy = GfuiFontHeight(GFUI_FONT_SMALL_C);

    GfuiPrintString("Fuel:", grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    if (car->_fuel < 5.0) {
        clr = grRed;
    } else {
        clr = grWhite;
    }
    snprintf(buf, BUFSIZE, "%.1f l", car->_fuel);
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;

    if (car->_state & RM_CAR_STATE_BROKEN) {
        clr = grRed;
    } else {
        clr = grWhite;
    }

    GfuiPrintString("Damage:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d", car->_dammage);
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;
    clr = grWhite;

    GfuiPrintString("Laps:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d / %d", car->_laps, s->_totLaps);
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;

    GfuiPrintString("Total:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, s->currentTime, 0);
    y -= dy;

    GfuiPrintString("Curr:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    if (!car->_commitBestLapTime) {
        clr = grRed;
    }
    grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_curLapTime, 0);
    y -= dy;
    clr = grWhite;

    GfuiPrintString("Last:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_lastLapTime, 0);
    y -= dy;

    GfuiPrintString("Best:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_bestLapTime, 0);
    y -= dy;

    GfuiPrintString("Penalty:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_penaltyTime, 0);
    y -= dy;

    GfuiPrintString("Top Speed:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d", (int)(car->_topSpeed * 3.6));
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;

    GfuiPrintString("_pos_X:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d", (int)(car->_pos_X));
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;

    GfuiPrintString("_pos_Y:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d", (int)(car->_pos_Y));
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);
    y -= dy;

    GfuiPrintString("_pos_Z:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB);
    snprintf(buf, BUFSIZE, "%d", (int)(car->_pos_Z));
    GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB);

    FILE *file;
    file = fopen("save.csv", "a");
    fprintf(file, "%f,%f\n", car->_pos_X, car->_pos_Y);
    fclose(file);
}
void

課題

オープンソースコードのカーシュミレーションソフトにおいて車の位置座標の情報をある一定の時間おきに取得したいと考えています.
x座標を一定の時間おきに出力するにはどうすれば良いでしょうか.
宜しくお願い致します.
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

file = fopen("test.txt", "w");

で、そのファイルは削除され、新規作成されます
なので、このオープンはプログラムの最初一回だけ実行し、fcloseもプログラム終了時に一回だけ実行するようにしましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/09 19:28

    回答ありがとうございます.
    file = fopen("test.txt", "a");
    とモードを追加書き込みにすることで表示される数字が一つではなくなりました.
    問題があといくつかあり
    ・数字がカンマでくぎられていない
    ・ある一定の時間おきに出力できるようにしたい
    恐縮ですが,ご教授お願い致します.

    キャンセル

  • 2019/01/09 19:31

    数字の出力のあとにカンマつければいい "%d,"
    時間読んできて出す時間になったら出すようにすればいい

    キャンセル

  • 2019/01/09 20:26

    回答ありがとうございます.
    "%d,"をしてもカンマで区切ることはできませんでしたが,
    fprintf(file, "%d"\n, car->_pos_X);
    とすることで改行することで見やすくなりました.

    時間読んできて出す時間になったら出すとは具体的にどのようにすれば良いでしょうか.
    宜しくお願い致します.

    キャンセル

  • 2019/01/09 20:33

    30分毎に出すなら21:00になるのを待って出す。出したら時間を2130にしてそれまで待つ、と、この繰り返しをすればよろしい

    キャンセル

  • 2019/01/11 13:58

    回答ありがとうございます.
    現在のコードでは0.01秒程度の間隔で座標が出力されています.
    1秒程度の間隔で座標を出力させたいのです.

    時間を2130にしてそれまで待つとはどのようにすれば良いのでしょうか
    宜しくお願い致します.

    キャンセル

同じタグがついた質問を見る

  • C++

    3934questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    2088questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。