【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18553

カウントダウン
投稿者---ライトニングカウント(2004/12/07 21:35:46)


カウントダウンが行われるプログラムを作っています。
#include <stdio.h>
#include <time.h>

#define TIME_LIMIT

int main(void)
{
time_t time1;
double s;
time(&time1);

while((s = difftime(time(NULL),time1)) < TIME_LIMIT)
{
printf("\n%d秒",(int)s);

if ((s = difftime(time(NULL),time1)) >= TIME_LIMIT)
{
break;
}
}

printf("\n%d秒\n",(int)s);

if (s >= TIME_LIMIT)
printf("制限時間オーバー!\n");
return 0;
}
このプログラムだと、実行すると縦にいくつもの時間が表示されてしまいます。
カウントダウンの表示は一つだけにしたいのですが、どうしたらよいか分かりません。どうしたらよいでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:カウントダウン 18556 もぐりん 2004/12/07 22:29:04


No.18556

Re:カウントダウン
投稿者---もぐりん(2004/12/07 22:29:04)


まず、【掲示板ご利用上の注意】は読んでいますか?
開発環境は?
ソースはコンパイルしましたか?
以下、WindowsXP(SP2) + VC++6(SP6)の環境でコンパイルしましたが
エラーになって実行ファイルが作成されません。

---------------------------------------------------------------
C:\Work>cl demo.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

demo.c
demo.c(12) : error C2059: 構文エラー : ')'
demo.c(16) : error C2059: 構文エラー : ')'
demo.c(20) : error C2059: 構文エラー : '}'
demo.c(24) : error C2059: 構文エラー : 'if'
demo.c(26) : error C2059: 構文エラー : 'return'
demo.c(27) : error C2059: 構文エラー : '}'

C:\Work>
---------------------------------------------------------------



この投稿にコメントする

削除パスワード

No.18557

Re:カウントダウン
投稿者---ライトニングカウント(2004/12/07 22:33:28)


環境はVBC++6.0です。
こちらではうまく動きましたが・・・。


この投稿にコメントする

削除パスワード

No.18558

Re:カウントダウン
投稿者---kolona(2004/12/07 22:55:29)


>環境はVBC++6.0です。
>こちらではうまく動きましたが・・・。
#define
が定数に定義されていないためと思われます。
TIME_LIMITがスペースに変わっているか、あるいは無くなっているようです。TIME_LIMITをソースの中から消すと同様のエラーが出ます。
貼るときは動いたソースをそのまま貼らないとわからなくなります。



この投稿にコメントする

削除パスワード

No.18559

Re:カウントダウン
投稿者---ライトニングカウント(2004/12/07 23:25:12)


#define TIME_LIMIT 10
TIME_LIMITの後の10が抜けていました。
これで動くと思いますか。


この投稿にコメントする

削除パスワード

No.18560

Re:カウントダウン
投稿者---通りすがり(2004/12/07 23:35:49)


>#define TIME_LIMIT 10
>TIME_LIMITの後の10が抜けていました。
>これで動くと思いますか。

自分で試せばいいでしょう。


この投稿にコメントする

削除パスワード

No.18561

Re:カウントダウン
投稿者---RAPT(2004/12/07 23:36:14)


CUIで表示させるには、環境依存のコードが必要です。


この投稿にコメントする

削除パスワード

No.18562

Re:カウントダウン
投稿者---RiSK(2004/12/07 23:46:28)


\r は処理系に影響するのでしょうか?
WinXP Pro/VC6 では OK です。
#include <stdio.h>
#include <time.h>

#define TIME_LIMIT 10

int main(void)
{
    time_t time1;
    double s;
    time(&time1);
    
    while((s = difftime(time(NULL),time1)) < TIME_LIMIT)
    {
        printf("%d秒\r",(int)s);
        
        if ((s = difftime(time(NULL),time1)) >= TIME_LIMIT)
        {
            break;
        }
    }
    printf("%d秒\n",(int)s);
    
    if (s >= TIME_LIMIT)
        printf("制限時間オーバー!\n");
    return 0;
}



この投稿にコメントする

削除パスワード

No.18598

Re:カウントダウン
投稿者---Hermit(2004/12/08 21:15:19)


>\r は処理系に影響するのでしょうか?

DOS窓だったらいいと思いますが、

一応、処理系に依存します。
改行文字は<CR>が多いので、モニタ側で<CR><LF>変換するものもあります。
表示がUnix系の物だとは限らないので。


この投稿にコメントする

削除パスワード

No.18600

Re:カウントダウン
投稿者---YuO(2004/12/08 21:36:07)


>\r は処理系に影響するのでしょうか?

基本的に処理系に影響しません。
標準準拠の処理系である限り,\rは常に復帰であり,
「現表示位置をその行の最初の位置に移動する」(JIS X 3010:1993)
という意味をもちます。



この投稿にコメントする

削除パスワード

No.18602

Re:カウントダウン
投稿者---Hermit(2004/12/08 22:39:24)


>基本的に処理系に影響しません。
>標準準拠の処理系である限り,\rは常に復帰であり,
>「現表示位置をその行の最初の位置に移動する」(JIS X 3010:1993)
>という意味をもちます。

念のために書いておきますが、
一応、標準に準拠出来ない処理系でってことですので。
その手のことが有った OS では、OS-9 が有りました。

Unix 系以外の大型コンピュータは、
<CR> が改行文字の事が多かったようですので、
'\r' の対応出来てるのって有るのかな・・・


この投稿にコメントする

削除パスワード

No.18609

Re:カウントダウン
投稿者---ホワイト(2004/12/09 09:33:12)


読みにくいのでちゃんと字下げしてくださいね
以下のソースで期待している動きはすると思います。
while文やif文の条件がいまいちわかっていない気がするのですが・・・


#include <stdio.h>
#include <time.h>
#define TIME_LIMIT 10

int main(void){
    
    time_t time1;
    double s,mem=0;

    time(&time1);

    while((s = difftime(time(NULL),time1)) < TIME_LIMIT){
        if(mem != s){
            printf("\n%d秒",(int)s);
        }      
        mem = s;
    }

    printf("\n%d秒\n制限時間オーバー!",(int)s);

    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧