C言語関係掲示板

過去ログ

No629 プログラムを「Shift+A」で終了させ方

[戻る] [ホームページ]
No.6523

プログラムを「Shift+A」で終了させ方
投稿者---レミ(2003/05/18 18:22:02)


こんにちは
今デジタル時計?を作成しているのですが、
終了を「Shift」キー、もしくは「Ctrl」キーを押しながら
「A」を押すと終了するようにしたいのですが
どうすればいいでしょうか?
For文の中で、if文を使って break;
という感じで終了させたいと思っています。
よろしくお願いします!

開発環境
WindowsXP
VisualC++6.0 SP5で,WindowsSDK使用

#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>

int main(void)
{
	time_t sys_time;	// long整数
	struct tm *t_time;	// tm構造体へのポインタ
	char timeBuf[25];

	HANDLE hStdout;
	COORD dwPos;

	hStdout = GetStdHandle( STD_OUTPUT_HANDLE);

	dwPos.X = 0;
	dwPos.Y = 0;

	for(;;){
		time( &sys_time);
		t_time = localtime( &sys_time);
		strftime( timeBuf, 25, "%Y/%m/%d %H:%M:%S\n", t_time);

		SetConsoleCursorPosition( hStdout, dwPos);
		printf( timeBuf);

		Sleep( 500);	// 500ミリ秒中断
	}

	return 0;
}


No.6527

Re:プログラムを「Shift+A」で終了させ方
投稿者---かずま(2003/05/18 18:50:55)


> 終了を「Shift」キー、もしくは「Ctrl」キーを押しながら
> 「A」を押すと終了するようにしたいのですが
> どうすればいいでしょうか?
for(;;){ を while (!kbhit() || (getch() | 0x40) != 'A') { にする。

> For文の中で、if文を使って break;
> という感じで終了させたいと思っています。
        if (kbhit() && (getch() | 0x40) == 'A') break;


No.6528

Re:プログラムを「Shift+A」で終了させ方
投稿者---レミ(2003/05/18 19:17:02)


かずまさん
お返事ありがとうございます。
かずまさんの書かれたif文を付け加えると
私が考えていたとおりに動きました。
ありがとうございます。
ただ
   if (kbhit() && (getch() | 0x40) == 'A') break;

の、(getch() | 0x40) == 'A'
のところがよくわかりません
申し訳ないのですが解説していただけないでしょうか?
よろしくお願いします。

No.6530

Re:プログラムを「Shift+A」で終了させ方
投稿者---かずま(2003/05/18 19:26:11)


getch() == 'A' だと Shift+A だけ、getch() == 0x01 だと Ctrl+A だけ、
((c = getch()) == 'A' || c == 0x01) だと、変数 c が必要。
そこで、| 0x40 で 0x01 を 0x41 ('A') に変換しているのです。

No.6532

Re:プログラムを「Shift+A」で終了させ方
投稿者---レミ(2003/05/18 20:14:47)


かずまさん
丁寧な説明
ありがとうございました。
また、よろしくお願いします。