回文章列表
作者Formose.bbs@cpu.tfcis.org (對妳情深不變~~) 看板: itoc
標題[問題] 股市大亨
時間動力核心 (2007/05/06 Sun 13:55:38)
小弟使用的是Win版的Maple_itoc最新版
最近新裝上了股市大亨程式碼的程式(非精華區裡頭的)
不過卻出現了怪怪的問題,以下
----------------------------------------------------------------------------
      編號  商店名稱    價  格()  目前數量 今日成交量   擁有數量   
   ◇──────────────────────────────────◇
       1.   上 閤 屋 538976.26(△ 540225.82) 825441073-1386167893          5
       2.   新 天 地 538976.28(▽-1440691.79) 549761645  540025032          0
       3.   遠東百貨 460628.51(▼-1532254.76)1470505009 -189151045          0
       4.   統聯客運 876294.49(▲ 552314.47)1700022177  455090186          0
       5.   國賓影城 538996.01(△ 538976.28) 544826468  859517275          0
       6.   生活工坊 891297.82(▲ 1834687.26) 538976288 -994939598          0
       7.   寶 雅 館 552313.88(▲ 168457.63) 538976288-1507839456          0
       8.   成大醫學 -375119.-81(△ 1528504.35)-1512986080  541565271          0
   ◇──────────────────────────────────◇
       加權股價總指數: -272603.-82   ▼-2104748.02      總成交量: -1681900228

   您的股價總值: -1434225506 銀幣

   您的資本金額: 388139061 銀幣
----------------------------------------------------------------------------
每家的價格竟然都有幾十萬,漲跌也很恐怖

然後去看了一下走勢圖

發現基值竟然也是好幾萬

這..是哪裡出了問題呢?

目前猜測應該是stock-change.c有錯

不過看來看去還是找不到問題所在

可以麻煩各位大大指教一下嗎?

以下附上我的程式碼
----------------------------------------------------------------------------
: game/stock.c

/*-------------------------------------------------------*/
/* stock.c      ( NTHU CS MapleBBS Ver 3.10 )            */
/*-------------------------------------------------------*/
/* target : 股市交易                                     */
/* author : Efen.bbs@bbs.med.ncku.edu.tw                 */
/*-------------------------------------------------------*/


#include "bbs.h"



#define FN_STOCK      "newstock"       /* 個人的股市檔案-各股擁有張數 */
#define FN_STOCK_LOG  "newstock.log"   /* 個人的股市檔案-歷史記錄 */
#define MAXSTOCK      8             /* 八家 */
#define OUTPUT_STOCK  "run/Stock"

static char fn_stock[] = "gem/@/@-stock";
static char fn_help[] = "gem/@/@-stockhelp";
static char fn_stockwin[] = "run/stock.wintmp";

typedef struct
{
  int price[MAXSTOCK];          /* 價格 */
  int change[MAXSTOCK];         /* 漲跌 */
  int stillnum[MAXSTOCK];       /* 剩餘數量 */
  int ordernum[MAXSTOCK];       /* 成交量 */
  int startnum[MAXSTOCK];       /* 每日初始值 */
}      STOCK;

static char stockname[MAXSTOCK][9] =
{
  "上 閤 屋", "新 天 地", "遠東百貨", "統聯客運",
  "國賓影城", "生活工坊", "寶 雅 館", "成大醫學"
};

static int own[MAXSTOCK];
static int num = 0;


/*-------------------------------------------------------*/
/* 螢幕控制                                              */
/*-------------------------------------------------------*/

static void
show_stock_data(sto)
  STOCK *sto;
{
  int i, total, chan, all, ch, cc, allmoney;

  total = 0;
  chan = 0;
  all = 0;
  allmoney = 0;

  for (i = 0; i < MAXSTOCK; i++)
  {
    total += sto->price[i];
    chan += sto->change[i];
    all += sto->ordernum[i];
    allmoney += own[i] * sto->price[i];
  }

  move(2, 0);
  outs("   \033[1;42m   編號  \033[36m商店名稱    \033[33m價  格"
    "\033[37m(\033[31m漲    \033[32m跌\033[37m)  目前數量 今日成交量"
    "   擁有數量   \033[m\n");
  outs("   \033[46m◇──────────────────────"
    "────────────◇\033[m\n");

  for (i = 0; i < MAXSTOCK; i++)
  {
    ch = (sto->price[i] % 1000) / 10;
    if (sto->change[i] >= 0)
    {
      cc = (sto->change[i] % 1000) / 10;
      prints("\033[1m%8d.\033[36m%11s \033[3%dm%6d.%02d(%2s %02d.%02d)"
        "\033[37m%10d%11d%11d\033[m\n",
        i + 1, stockname[i],
        (sto->change[i] == 0) ? 7 : 1,
        sto->price[i] / 1000, ch,
        (sto->change[i] == 0) ? "==" :
          (sto->price[i] > sto->startnum[i] * 1.05 ? "▲" : "△"),
        sto->change[i] / 1000, cc,
        sto->stillnum[i], sto->ordernum[i], own[i]);
    }
    else
    {
      cc = (-sto->change[i] % 1000) / 10;
      prints("\033[1m%8d.\033[36m%11s \033[32m%6d.%02d(%2s-%02d.%02d)"
        "\033[37m%10d%11d%11d\033[m\n",
        i + 1, stockname[i], sto->price[i] / 1000, ch,
        (sto->price[i] < sto->startnum[i] * 0.95) ? "▼" : "▽",
        -sto->change[i] / 1000, cc,
        sto->stillnum[i], sto->ordernum[i], own[i]);
    }
  }
  outs("   \033[46m◇──────────────────────"
    "────────────◇\033[m\n");

  ch = (total % 1000) / 10;

  if (chan >= 0)
  {
    cc = (chan % 1000) / 10;
    prints("\033[1;37m       加權股價總指數: \033[3%dm%d.%02d   "
      "%2s %d.%02d\033[37m      總成交量: %d\033[m\n\n",
      (chan == 0) ? 7 : 1, total / 1000, ch,
      (chan == 0) ? "==" : "▲", chan / 1000, cc, all);
  }
  else
  {
    cc = (-chan % 1000) / 10;
    prints("\033[1;37m       加權股價總指數: \033[32m%d.%02d   "
      "▼-%d.%02d\033[37m      總成交量: %d\033[m\n\n",
      total / 1000, ch, -chan / 1000, cc, all);
  }

  prints("   \033[1;32;45m您的股價總值:\033[33m %d \033[36m銀幣\033[m\n\n",
    allmoney);
  prints("   \033[1;45m您的資本金額:\033[33m %d \033[36m銀幣\033[m",
    cuser.money);
}


static void
query_stock()
{
  FILE *fp;
  char fpath[32];
  int tickets[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  int stock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  int ch, num1, num2, i = 0;

  usr_fpath(fpath, cuser.userid, FN_STOCK_LOG);

  if (fp = fopen(fpath, "r"))
  {
    while ((fscanf(fp, "%d %d", &num1, &num2)) != EOF)
    {
      stock[i] = num1;
      tickets[i] = num2;
      i++;
    }
    fclose(fp);
  }
  else
  {
    for (i = 0; i < MAXSTOCK; i++)
    {
      stock[i] = 0;
      tickets[i] = 0;
    }
  }

  clear();
  outs("\033[1;33m櫃台小姐給您一張清單:\033[\n");
  prints("\033[1;32m股市:\033[35m%s \033[32m持股一覽表\033[m\n\n",
    cuser.userid);
  for (i = 0; i < 8; i++)
  {
    ch = (tickets[i] % 1000) / 10;
    prints("\033[1;3%dm %d.您擁有( %8s )的股份共 %8d 張,"
      "股價 [%5d.%02d]\033[m\n",
      i + 1 <= 7 ? i + 1 : i - 6, i + 1,
      stockname[i], stock[i], tickets[i] / 1000, ch);
  }
  vmsg(NULL);
}


int
main_stock()
{
  int ch, i, j, num1, num2, money, canbuy;
  int tickets[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  int stock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  FILE *fp, *fp2;
  char buf[13], name[6], fpath[32];
  char userid[13];
  STOCK oldsto, *sto;

  if (cutmp->status & STATUS_COINLOCK)
  {
    vmsg(MSG_COINLOCK);
    return XEASY;
  }

  while (1)
  {
    j = 0;
    usr_fpath(fpath, cuser.userid, FN_STOCK);

    if (fp = fopen(fpath, "r")) /* 以前玩過股市,讀取目前所有的股份 */
    {
      for (i = 0; i < MAXSTOCK; i++)
        fscanf(fp, "%d\n", &own[i]);
    }
    else
      /* 沒玩過股市,建立新檔 */
    {
      fp = fopen(fpath, "w");
      for (i = 0; i < MAXSTOCK; i++)
      {
        fprintf(fp, "%d\n", 0);
        own[i] = 0;
      }
    }
    fclose(fp);

    clear();
    outs("\033[1;36;44m ★ ★ ★ ★  \033[31m【 \033[35m證券交易所\033[31m 】"
      "  \033[36m★ ★ ★ ★         [\033[32mDesign by Efen\033[36m]
\033[m");

    strcpy(fpath, FN_RUN_STOCK);

    if (rec_get(fpath, &oldsto, sizeof(STOCK), 0))
    {
      memset(&oldsto, 0, sizeof(STOCK));
      for (i = 0; i < MAXSTOCK; i++)
      {
        oldsto.price[i] = 100000;
        oldsto.change[i] = 0;
        oldsto.stillnum[i] = 100;
        oldsto.ordernum[i] = 0;
        oldsto.startnum[i] = 100000;
      }
      rec_add(fpath, &oldsto, sizeof(STOCK));
    }

    sto = &oldsto;

    show_stock_data(sto);

    switch (vans("[B:買 S:賣 C:查詢 D:刪除明細 F:各股走勢 "
        "I:走勢圖 H:說明 A:大亨 Q:離開]"))
    {
    case 'a':
      more(OUTPUT_STOCK, NULL);
      break;

    case 'h':
      more(fn_help, NULL);
      break;

    case 'c':
      query_stock();
      break;

    case 'f':
      more(FN_RUN_STOCK_RECORD, NULL);
      break;

    case 'i':
      more(fn_stock, NULL);
      break;

    case 'd':
      if (vans("確定刪除(Y/N)?[N]") == 'y')
      {
        usr_fpath(fpath, cuser.userid, FN_STOCK_LOG);
        unlink(fpath);
      }
      break;

    case 's':
      if (utmp_count(cuser.userno, 0) > 1)
      {
       vmsg("您重複登入BBS,有洗錢嫌疑,請登出重複之ID");
       break;
      }
      sprintf(buf, "要賣哪家(1-%d)?", MAXSTOCK);
      vget(b_lines, 0, buf, name, 2, DOECHO);
      i = atoi(name);
      if (i < 1 || i > MAXSTOCK)
        break;

      if (!own[i - 1])
      {
        vmsg("已無股份可賣");
        break;
      }

      sprintf(buf, "要賣幾張(1-%d)?", own[i - 1]);
      vget(b_lines, 0, buf, name, 5, DOECHO);
      num = atoi(name);
      if (num < 1 || num > own[i - 1])
        break;

      money = sto->price[i - 1];
      strcpy(fpath, FN_RUN_STOCK);
      rec_get(fpath, &oldsto, sizeof(STOCK), 0);

      sto->stillnum[i - 1] = oldsto.stillnum[i - 1] + num;
      sto->ordernum[i - 1] = oldsto.ordernum[i - 1] + num;
      sto->price[i - 1] = oldsto.price[i - 1];
      sto->change[i - 1] = oldsto.change[i - 1];
      sto->startnum[i - 1] = oldsto.startnum[i - 1];

      rec_put(fpath, sto, sizeof(STOCK), 0, NULL);


      own[i - 1] -= num;

      canbuy = money * num * 0.997;
      cuser.money += canbuy;

/*      addmoney(canbuy);*/

      usr_fpath(fpath, cuser.userid, FN_STOCK_LOG);

      if (fp = fopen(fpath, "r"))
      {
        while ((fscanf(fp, "%d %d", &num1, &num2)) != EOF)
        {
          tickets[j] = num2;
          stock[j] = own[j];

          if (stock[j] == 0)
            tickets[j] = 0;
          j++;
        }
        fclose(fp);
      }
      else
      {
        for (j = 0; j < MAXSTOCK; j++)
        {
          if (j == (i - 1))
            tickets[j] = money;
          else
            tickets[j] = 0;

          stock[j] = own[j];
        }
      }

      fp = fopen(fpath, "w");
      for (j = 0; j < MAXSTOCK; j++)
        fprintf(fp, "%d %d\n", stock[j], tickets[j]);
      fclose(fp);

      strcpy(fpath, FN_RUN_STOCK_USER);
      fp = fopen(fpath, "a+");
      ch = (money % 1000) / 10;     /* 小數位 */
      fprintf(fp, "[%s] %3d.%02d %12s賣出 %s %d張 收入%d\n",
        Now(), money / 1000, (ch < 10 ? ch * 10 : ch), cuser.userid,
        stockname[i - 1], num, canbuy);
      fclose(fp);

      usr_fpath(fpath, cuser.userid, FN_STOCK);
      fp = fopen(fpath, "w");
      for (j = 0; j < MAXSTOCK; j++)
        fprintf(fp, "%d\n", own[j]);
      fclose(fp);

      sprintf(fpath, "賣出 %s %d張,收入 %d 銀幣!",
        stockname[i - 1], num, canbuy);
      vmsg(fpath);
      acct_save(&cuser);
      break;

    case 'b':
      if (utmp_count(cuser.userno, 0) > 1)
      {
        vmsg("您重複登入BBS,有洗錢嫌疑,請登出重複之ID");
        break;
      }
      sprintf(buf, "要買哪家(1-%d)?", MAXSTOCK);
      vget(b_lines, 0, buf, name, 2, DOECHO);
      i = atoi(name);
      if (i < 1 || i > MAXSTOCK)
        break;

      if (sto->stillnum[i - 1] < 1)
      {
        vmsg("已無股份可買");
        break;
      }

      money = sto->price[i - 1];

      canbuy = (sto->stillnum[i - 1] > 1000) ?
        (((cuser.money / money) > 1000) ? 1000 :
        (cuser.money / money)) :
        (((cuser.money / money) > sto->stillnum[i - 1]) ?
        sto->stillnum[i - 1] : (cuser.money / money));

      sprintf(buf, "要買幾張(1-%d)?", canbuy);
      vget(b_lines, 0, buf, name, 5, DOECHO);
      num = atoi(name);
      if (num < 1 || num > canbuy)
        break;

      if (cuser.money >= (money * num))
      {
        strcpy(fpath, FN_RUN_STOCK);
        rec_get(fpath, &oldsto, sizeof(STOCK), 0);

        if (oldsto.stillnum[i - 1] < num)
        {
          vmsg("股份剛被搶走了,下次請早!");
          break;
        }
        sto->stillnum[i - 1] = oldsto.stillnum[i - 1] - num;
        sto->ordernum[i - 1] = oldsto.ordernum[i - 1] + num;
        sto->price[i - 1] = oldsto.price[i - 1];
        sto->change[i - 1] = oldsto.change[i - 1];
        sto->startnum[i - 1] = oldsto.startnum[i - 1];

        rec_put(fpath, sto, sizeof(STOCK), 0, NULL);

        own[i - 1] += num;

        cuser.money -= (money * num);

        usr_fpath(fpath, cuser.userid, FN_STOCK_LOG);

        if (fp = fopen(fpath, "r"))
        {
          while ((fscanf(fp, "%d %d", &num1, &num2)) != EOF)
          {
            stock[j] = own[j];
            if (j == (i - 1))
              tickets[j] = (num1 * num2 + num * sto->price[j]) / own[j];
            else
              tickets[j] = num2;
            j++;
          }
          fclose(fp);
        }
        else
        {
          for (j = 0; j < MAXSTOCK; j++)
          {
            stock[j] = own[j];
            if (j == (i - 1))
              tickets[j] = sto->price[i - 1];
            else
              tickets[j] = 0;
          }
        }

        fp = fopen(fpath, "w");
        for (j = 0; j < MAXSTOCK; j++)
          fprintf(fp, "%d %d\n", stock[j], tickets[j]);
        fclose(fp);

        strcpy(fpath, FN_RUN_STOCK_USER);
        fp = fopen(fpath, "a+");
        ch = (money % 1000) / 10;  /* 小數位 */
        fprintf(fp, "[%s] %3d.%02d %12s買進 %s %d張 花費%d\n",
          Now(), money / 1000, (ch < 10 ? ch * 10 : ch), cuser.userid,
          stockname[i - 1], num, money * num);
        fclose(fp);

        usr_fpath(fpath, cuser.userid, FN_STOCK);
        fp = fopen(fpath, "w");
        for (j = 0; j < MAXSTOCK; j++)
          fprintf(fp, "%d\n", own[j]);
        fclose(fp);
      }

      sprintf(fpath, "買進 %s %d張,花費 %d 銀幣!",
        stockname[i - 1], num, money * num);
      vmsg(fpath);
      acct_save(&cuser);
      break;


    case 'q':
      money = 0;
      for (j = 0; j < MAXSTOCK; j++)
        money += own[j] * sto->price[j];
      j = 0;

      if (fp = fopen(FN_RUN_STOCK_WIN, "r"))
      {
        fp2 = fopen(fn_stockwin, "w");

        while ((fscanf(fp, "%s %d", &userid, &num1)) != EOF)
        {
          if (money > num1 && (j != 1))
          {
            fprintf(fp2, "%s %d\n", cuser.userid, money);
            j = 1;
          }

          if (strcmp(userid, cuser.userid))
            fprintf(fp2, "%s %d\n", userid, num1);
        }
        fclose(fp);
        fclose(fp2);
      }

      if (j == 0)
      {
        sprintf(fpath, "%s %d\n", cuser.userid, money);
        f_cat(fn_stockwin, fpath);
      }

      rename(fn_stockwin, FN_RUN_STOCK_WIN);

      return 0;
    }
  }
}

----------------------------------------------------------------------------
: util/stock-change.c

/*-------------------------------------------------------*/
/* stock-change.c ( NTHU CS MapleBBS Ver 3.10 )          */
/*-------------------------------------------------------*/
/* target : 股市交易變化                                 */
/* author : Efen.bbs@bbs.med.ncku.edu.tw                 */
/*-------------------------------------------------------*/

#include "bbs.h"



#define FN_STOCK      "stock"      /* 個人的股市檔案-各股擁有張數 */
#define FN_STOCK_LOG  "stock.log"  /* 個人的股市檔案-歷史記錄 */
#define MAXSTOCK      8            /* 八家 */
#define ADJUST_M      10           /* adjust back 10 minutes */
#define MAX_LINE      16
#define OUTPUT_STOCK  "run/Stock"

static char fn_stock[] = "gem/@/@-stock";   /* 股市漲跌 */
static int all = 0;

typedef struct
{
  int price[MAXSTOCK];          /* 價格 */
  int change[MAXSTOCK];         /* 漲跌 */
  int stillnum[MAXSTOCK];       /* 剩餘數量 */
  int ordernum[MAXSTOCK];       /* 成交量 */
  int startnum[MAXSTOCK];       /* 每日初始值 */
}      STOCK;


static char stockname[MAXSTOCK][9] =
{
  "上 閤 屋", "新 天 地", "遠東百貨", "統聯客運",
  "國賓影城", "生活工坊", "寶 雅 館", "成大醫學"
};


static void
ansi_puts(fp, buf, mode)
  FILE *fp;
  char *buf, mode;
{
  static char state = '0';

  if (state != mode)
    fprintf(fp, "\033[3%cm", state = mode);
  if (*buf)
  {
    fprintf(fp, buf);
    *buf = '\0';
  }
}


static void
draw_usies(ptime)
  struct tm ptime;
{
  int num, hour, max, min, item, i, j, over;
  char buf[ANSILINELEN];
  FILE *fp;
  int act[24];

  for (i = 0; i < 24; i++)
    act[i] = 0;

  i = 0;

  if (fp = fopen(FN_RUN_STOCK_CHANGE, "r"))
  {
    while ((fscanf(fp, "%d", &num)) != EOF)
    {
      act[i] = num;
      i++;
    }
    fclose(fp);
  }
  else
    return;

  max = act[0];
  min = act[0];

  for (i = 0; i < 24; i++)
  {
    if (act[i] > max)
      max = act[i];
    else if (act[i] < min && act[i] != 0)
      min = act[i];
  }

  min = (min / 100) * 1;           /* Teddy修改:原為乘以100 */

  for (i = 0; i < 24; i++)
  {
    if (act[i] != 0)
      act[i] -= min;
  }

  max -= min;

  item = max / MAX_LINE + 1;
  over = max > 1000;

  fp = fopen(fn_stock, "w");

  fprintf(fp, "\t\t\t\033[1;33;46m [%02d/%02d/%02d] 今日股市走勢 \033[40m\n",
    ptime.tm_year % 100, ptime.tm_mon + 1, ptime.tm_mday);

  for (i = MAX_LINE + 1; i > 0; i--)
  {
    strcpy(buf, "   ");
    for (j = 0; j < 24; j++)
    {
      max = item * i;
      hour = act[j];
      if (hour && (max > hour) && (max - item <= hour))
      {
        ansi_puts(fp, buf, '3');
        if (over)
          hour = (hour + 5) / 10;
        fprintf(fp, "%-3d", hour);
      }
      else if (max <= hour)
      {
        ansi_puts(fp, buf, '1');
        fprintf(fp, "█ ");
      }
      else
        strcat(buf, "   ");
    }
    fprintf(fp, "\n");
  }

  fprintf(fp, "\033[34m"
    "  ╒════════════════════"
    "═══════════════╕\n  \033[32m"
    "0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 "
    "15 16 17 18 19 20 21 22 23\n"
    "\t%s\t\033[m\n"

"\033[35m基值:\033[37m%-10d\033[35m總成交量:\033[1;37m%d\033[m\n",
    over ? "\033[35m單位:\033[37m10\033[m" : "", min, all);
  fclose(fp);

  if (ptime.tm_hour == 23)
    unlink(FN_RUN_STOCK_CHANGE);
}


int
main(argc, argv)
  int argc;
  char *argv[];
{
  int ch[MAXSTOCK], i, tmp[MAXSTOCK], total, totalprice = 0, num, min;
  FILE *fp, *fp2;
  char fpath[24], userid[6][13], buf[13];
  STOCK oldsto, *sto;
  time_t now;
  struct tm *ptime, xtime;

  time(&now);
  ptime = localtime(&now);
  xtime = *ptime;

  chdir(BBSHOME);

  strcpy(fpath, FN_RUN_STOCK);

  rec_get(fpath, &oldsto, sizeof(STOCK), 0);

  sto = &oldsto;

  total = num = sto->ordernum[0];

  for (i = 0; i < MAXSTOCK; i++)
  {
    all += sto->ordernum[i];
    if (sto->ordernum[i] > total)
      total = sto->ordernum[i];
    else if (sto->ordernum[i] < num)
      num = sto->ordernum[i];
  }

  min = (total + num) / 2;

  for (i = 0; i < MAXSTOCK; i++)
  {
    if (total == num)
      ch[i] = 30;
    else
      ch[i] = 30 + 10 * (sto->ordernum[i] - min) / (total - num);
  }

  srand(time(NULL));

  for (i = 0; i < MAXSTOCK; i++)
  {
    if (rnd(10) == 0)
      tmp[i] = 0;
    else
    {
      num = rnd(ch[i] * 250 + 10000);
      if (num > 8571)
      {
        total = oldsto.startnum[i] * (1.07);
        if ((total - oldsto.price[i]) > 5000)
          tmp[i] = rnd(5000);
        else
          tmp[i] = rnd(total - oldsto.price[i]);
      }
      else
      {
        total = oldsto.startnum[i] * (0.93);
        if ((oldsto.price[i] - total) > 5000)
          tmp[i] = -rnd(5000);
        else
          tmp[i] = -rnd(oldsto.price[i] - total);
      }
    }
  }

  for (i = 0; i < MAXSTOCK; i++)
  {
    sto->price[i] = oldsto.price[i] + tmp[i];
    sto->change[i] = tmp[i];

    sto->stillnum[i] = oldsto.stillnum[i] + ch[i];
    if (sto->stillnum[i] > 5000)
      sto->stillnum[i] = 10;

    totalprice += sto->price[i];

    if (ptime->tm_hour == 0 && ptime->tm_min == 5)
    {
      sto->ordernum[i] = 0;
      sto->startnum[i] = sto->price[i];
    }
    else
    {
      sto->ordernum[i] = oldsto.ordernum[i];
      sto->startnum[i] = oldsto.startnum[i];
    }
  }

  rec_put(fpath, sto, sizeof(STOCK), 0, NULL);

  for (i = 0; i < MAXSTOCK; i++)
    ch[i] = (sto->price[i] % 1000) / 10;   /* 小數位 */

  strcpy(fpath, FN_RUN_STOCK_RECORD);
  fp = fopen(fpath, "a+");
  fprintf(fp, "\033[1;33m%s\033[m\n", Btime(&now));
  fprintf(fp, "%9s%9s%9s%9s%9s%9s%9s%9s\n",
    stockname[0], stockname[1], stockname[2], stockname[3],
    stockname[4], stockname[5], stockname[6], stockname[7]);
  fprintf(fp, "%6d.%02d%6d.%02d%6d.%02d%6d.%02d%6d"
    ".%02d%6d.%02d%6d.%02d%6d.%02d\n\n",
    sto->price[0] / 1000, ch[0], sto->price[1] / 1000, ch[1],
    sto->price[2] / 1000, ch[2], sto->price[3] / 1000, ch[3],
    sto->price[4] / 1000, ch[4], sto->price[5] / 1000, ch[5],
    sto->price[6] / 1000, ch[6], sto->price[7] / 1000, ch[7]);
  fclose(fp);

  if (ptime->tm_min == 5)
  {
    fp = fopen(FN_RUN_STOCK_CHANGE, "a+");
    fprintf(fp, "%d\n", totalprice / 1000);
    fclose(fp);
    draw_usies(xtime);
  }

  fp = fopen(OUTPUT_STOCK, "w");
  fprintf(fp, "\n        ┤\033[1;41m     %d 月 %d 日 %d 時"
    " 股市大亨      \033[m├\n\n",
    ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_hour);

  for (i = 0; i < 6; i++)
  {
    strcpy(userid[i], "");
    ch[i] = 0;
  }

  i = 0;
  if (fp2 = fopen(FN_RUN_STOCK_WIN, "r"))
  {
    while ((fscanf(fp2, "%s %d", &buf, &num)) != EOF)
    {
      strcpy(userid[i], buf);
      ch[i] = num;
      if (++i > 4)
        break;
    }
    fclose(fp2);
  }

  for (i = 0; i < 5; i++)
  {
    fprintf(fp, "  \033[1;3%dm第 %d 名:%-13s  股市總值 %d 銀幣\n",
      i + 1, i + 1, userid[i], ch[i]);
  }
  fclose(fp);

  return 0;
}


--
=[:摃�◣�:Origin ]|[  Ocpu.tfcis.org  ]|[�搟說:]=
=[:摃�╱�:Author ]|[      140.127.186.3       ]|[�:]=
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻