ページ 11

プログラミング課題で

Posted: 2012年2月05日(日) 10:16
by Jul
Linuxでフラッシュ暗算を製作しているのですが、一定時間、数字を表示させるのにsleep関数を使ってみたところ、エラー表示になりました。
また関数を使わなかったら数字が表示されるまもなく答えるようになってしまいます。どうすればいいのでしょうか。ご教授お願いいたします。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 10:39
by Dixq (管理人)
情報が少なくて答えにくいと思います。
エラーが出た時の詳細なログや表示はどんなものでしたか?
また、何で表示していますか?
シェル?SDL? OpenGL?

Re: プログラミング課題で

Posted: 2012年2月05日(日) 11:43
by Jul
シェルです。以下のプログラムを組んだんですが、作動しませんでした。

コード:

#include <stdio.h>
#include <stdlib.h> /* rand, srand */
#include <time.h>

int main()
{	
int n,sum=0,r;	
srand((unsigned)time(NULL));		

int i = 0;		
        
while( i <3 )
{
          i = i +1 ;
        printf("%d秒前\r",3-i);		
        Sleep(1000);	
}		

int h = 0;

while( h<5)
{	
       h = h+1 ; 
       r=rand()%10;		
        printf("%d      \r",r);		
        sum+=r;		
        Sleep(900);		
        printf("\r");		
        Sleep(100);	
}		
printf("ANSWER \n");	
scanf("%d",&n);		
if(sum==n)
{		
        printf("OK \n\n");
}	
else		
{
        printf("MISS Answer is %d \n\n",sum);
}

return 0;
}

Re: プログラミング課題で

Posted: 2012年2月05日(日) 11:47
by softya(ソフト屋)
codeタグをお使い下さい。 → http://dixq.net/board/board.html
SleepはWindowsの関数なのでLinuxだとusleepなどを使って下さい。
「Man page of USLEEP」
http://linuxjm.sourceforge.jp/html/LDP_ ... eep.3.html

Re: プログラミング課題で

Posted: 2012年2月05日(日) 12:25
by Jul
sleep表示の部分をusleep

コード:

に書き換え実行したところ、
エラーで

コード:

expected declaration spesifiers  or ’…’ before numericconstant 
と表示されました。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 12:36
by softya(ソフト屋)
こちらで書き換えた所、エラーは出ませんでした。
ソースコードをcodeタグで貼りつけてみてください。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 14:30
by jul

コード:

#include <stdio.h>
#include <stdlib.h> /*rand, srand */
#include <time.h>
#include <unistd.h>

int main()
{	
int n,sum=0,r;	
srand((unsigned)time(NULL));		

int i = 0 ;
while(i<3)		
        i = i+1 ;        
 
        printf("%d秒前\r",3-i);		
        int usleep(useconds_t,1000);	
}		

int h = 0 ;

while(i<5)
{		
        h = h+1 ;
        
        r=rand()%10;		
        printf("%d      \r",r);		
        sum+=r;		
        int uleep(useconds_t,900);		
        printf("        \r");		
        int usleep(useconds_t,100);	
}		
printf("ANSWER \n");	
scanf("%d",&n);		
if(sum==n)		
        printf("OK \n\n");	
else		
        printf("MISS  Answer is %d\n\n",sum);
} 

return 0;
}

[code=cpp]
[/code]

Re: プログラミング課題で

Posted: 2012年2月05日(日) 14:35
by みけCAT
関数呼出しの前にintはいりません。
uleepはusleepのtypoでしょう。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 14:47
by softya(ソフト屋)
関数の宣言と呼び出しの区別がついていないようです。

これは宣言で
int usleep(useconds_t usec);
呼び出しは
usleep( 100*1000 ); //単位はマイクロ秒

Re: プログラミング課題で

Posted: 2012年2月05日(日) 15:18
by Jul
指摘された部分を修正したところ、エラー文が表示されることなく作動したのですが、問題の数字の表示が見えません。
数字の表示時間が短すぎるからなのでしょうか。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 15:30
by softya(ソフト屋)
ストリーム出力系のprintfなどはバッファがあるのでバッファに溜まったまま出力されていないんだと思います。
fflush(stdout);
で強制出力を行なって下さい。printfの直後にこの命令を書きます。

Re: プログラミング課題で

Posted: 2012年2月05日(日) 15:47
by Jul
fflush追加したところ、無事に起動できました。
本当にありがとうございました!!

Re: プログラミング課題で

Posted: 2012年2月05日(日) 15:59
by softya(ソフト屋)
解決したら「解決チェック」をお願いします。それと解決したコードを掲載して下さい。後の人の参考になるコードを残すのがルールとなっております。
もうひとつインデント(字下げ)がちゃんとされていないので読みづらいので気を付けられたほうが良いと思います。バグの原因にもなります。