
無限ループさせているwhileやfor文などで、
何かのキーを押すとループを抜けるように設定したいのですが可能でしょうか?
(scanfやcinなどをループの中に組み込まずに。ctrl+Cも無しで。)
(あと、フォーム上ではなくコンソール上で。)
多分説明不足なのでもうちょっと詳しく。
たとえば、
while ( i != 1 ){
j += 1;
}
の様な無限ループを設定したとして、
本来なら
if (j > 100 ){ break; }
とか、
while文の中に
scanf ( "%d" , &i );
等を入れて終了条件を満たさせるべきですが、
そうではなく、ひたすら無限ループを続けているところにEscキーを押すとループから脱出するようなプログラムを作ってみたいのです。
そういうプログラムは可能でしょうか?
どうかご教授下さい。
使用コンパイラ:Visual C++ 2008 Express Edition
No.2ベストアンサー
- 回答日時:
★アドバイス
・Windows OS で VC++ ならば kbhit() 関数が便利です。
使用例:
#include <conio.h>
// ESCのキーコード
#define ESC (0x1B)
int main( void )
{
while ( !kbhit() || (getch() != ESC) ){
:
無限ループ処理
:
}
return 0;
}
解説:
・kbhit()関数はキーバッファにキー情報があるかどうかを調査します。
これによりキーバッファがないときは while 文中が『真』となりループ。
・キーバッファがあるときは while 文中で getch() 関数より1文字取得。
ここで ESC キー以外なら無限ループ、ESC キーなら無限ループを抜けます。
・なお kbhit() 関数は非標準の関数です。
VC++なら conio.h ヘッダがあり利用できます。
No.1
- 回答日時:
別スレッドで入力を待つ
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <process.h>
#include <conio.h>
#include <intrin.h>
long esc;
void key (void *dummy)
{
while (1)
{
if (0x1b == _getch ())
{
_InterlockedIncrement (&esc);
break;
}
}
}
int _tmain (int argc, TCHAR **argv)
{
int j = 0;
_beginthread (key, 0, NULL);
while (1)
{
if (esc)
{
break;
}
printf ("%d\n", j++);
}
return 0;
}
とても早い解答ありがとうございます。
実行してみて、自分が考えていたような動作をしてくれました!
これを参考にプログラムを組んでみようと思います。
あと、これは多分マルチスレッドとか呼ばれるものの類ですよね?
(扱った事がないので詳しくは分かりませんが。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- C言語・C++・C# プログラムについて。 9 2023/07/22 00:09
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# C言語について 4 2022/07/02 01:08
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- C言語・C++・C# プログラムについて。 4 2023/07/20 15:46
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
このQ&Aを見た人はこんなQ&Aも見ています
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
cout と cerrの違い
C言語・C++・C#
-
あるキーを押したら強制終了させるには。
C言語・C++・C#
-
-
4
C++で空Enterの入力を判断したい!!
C言語・C++・C#
-
5
特定のキーを押すまでループさせるにはどうすればよいですか。
Visual Basic(VBA)
-
6
C言語 空白の行(改行のみ)が入力されたらプログラムを終了する処理
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
C言語 配列の長さの上限
C言語・C++・C#
-
9
#defineの定数を文字列として読み込む
C言語・C++・C#
-
10
キーボード入力によるループの終了
C言語・C++・C#
-
11
Linuxプログラミングで、キーボードの値がほしい
C言語・C++・C#
-
12
適切な変換関数が存在しない???
C言語・C++・C#
-
13
Linuxで入力待ちなしkeyread関数のようなものはありますか?
C言語・C++・C#
-
14
キーボードを押すまで処理を中断させる方法
C言語・C++・C#
-
15
enterでループ終了
C言語・C++・C#
-
16
「キャンセル」ボタン付きの処理中ダイアログ
C言語・C++・C#
-
17
char*を初期化したいのですが
C言語・C++・C#
-
18
ループからの抜け出し方
C言語・C++・C#
-
19
ループの特定入力終了
C言語・C++・C#
-
20
空ENTERの判別
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報