VC++6.0を(初心者なのに)無謀にも購入したんですが、
クラスというのが全く理解できなかったのでコンソールアプリケーションから
作って見る事にしました。で、とりあえず、しょぼいのが出来たんですが
キーボードを押すまで処理を中断させる方法と、処理が終わった後キーボードを押すまでウインドウを閉じないようにする方法がわかりません。
初歩的な事でしょうが、初心者の私にはどこをどう調べたら良いかわからず困っています。どうかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

getch()を使えば勝手にキー入力待ちになりますので、


質問の答えとしてはkbhit()は不要です。

昔はキーボードでゲームをやろうとすると、
kbhit()とgetch()を組み合わせて使っていました。
アルタイムキー入力をやるために、
kbhit()が必要だったわけですが、
今回の場合はキー入力を待ちたいわけですから、
単に...

_getch();

だけでうまくいくと思います。
    • good
    • 1
この回答へのお礼

ありがとうございますKOH_daさん。
かなり悩んでやっとあそこに辿り着いたんですが、少し?違ってたみたいです(^_^;)
初めはキー入力を待つためにscanfでいろいろ試してたんですが全くもって
うまくいかなかったんで質問して正解でした。

>昔はキーボードでゲームをやろうとすると、
>kbhit()とgetch()を組み合わせて使っていました。
頑張っていつかゲームみたいな物を作ってみたいと思います。
またよろしくお願いします。

お礼日時:2001/03/31 04:04

えっと、kbhit()を使う理由なのですが…。


質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
純粋に「キー入力があったこと」を報告する関数がkbhit()で入力した値を取りこむ関数がgetch()です。


> コンソールアプリケーションでしか使えないと言う事でしょうか?
getch()、kbhit()共にANSI標準ライブラリ関数ではないのでWindowsのMS-DOSプロンプト(WindowsNTY/200のコマンドプロンプト)とMS-DOSのみで利用可能と考えた方が良いでしょう。
    • good
    • 0
この回答へのお礼

toysmithさん、ありがとうございます。
>質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
はい、その通りです。特に入力文字を表示させるまでは考えてませんでした。
Helpにもtoysmithさんと同じことが書かれていました。
結果、ああ言う風になったんですが・・・初心者には難しいですね(^_^;)
とりあえず、ここで教えていただいた事を頑張ってやってみます!
勉強になりました。
またよろしくお願いします。

お礼日時:2001/03/31 03:49

while( !_kbhit() ){}


_getch();

上の while(~){} は不要ですよ。
_getch() だけでプログラムは停止します。
_getch() の使い方はコンソールアプリで使うキー入力なのでこれで OK です。
    • good
    • 0
この回答へのお礼

haru-pさんありがとうございます。
Helpに_kbhit()がキー入力みたいな事が書かれていたので必死の思いで
これに辿り着いたんですが・・・。

while( !_kbhit() ){} ←何かのキーを押すまでループ
_getch(); ←キー情報を開放
のような感じで一人で納得してました。
実はいらなかったんですね、while( !_kbhit() ){}
これから書き直そうと思います。
またよろしくお願いします。

お礼日時:2001/03/30 22:25

コンソールアプリケーション(Windows上の)に依存する方法です。


移植性はありませんので御注意ください。

kbhit()または_kbhit()で「キーを押した」事がわかります。
キー入力が確認されたらgetch()または_getch()で入力文字を取りこみます。

アプリケーション終了時なら文字を取りこむ必要が無いのでkbhit()で入力待ちすれば良いでしょう。

この回答への補足

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。

補足日時:2001/03/30 20:25
    • good
    • 0
この回答へのお礼

ありがとうございます、toysmithさん。

>コンソールアプリケーション(Windows上の)に依存する方法です。
>移植性はありませんので御注意ください。
コンソールアプリケーションでしか使えないと言う事でしょうか?

とにかく頑張ってやってみます。getch()で入力文字を取り込めばprintfなどで
表示させられるということですね。ありがとうございました。
結果を報告したいので締め切りはもう少し待ってください。

お礼日時:2001/03/30 17:38

「キーボードを押すまでウインドウを閉じないように」は、


メニュー [ビルド]→[アクティブな構成の設定]→[Win32 Debug]を選択して [OK] ボタンを押しビルドします。
そして、プログラムが閉じてしまいそうな場所(ソース上)へカーソルを移動させて [F9] キーを押してみて下さい。
左側に赤い●が付くでしょ。
[F5] キーを押してプログラムを実行させると、その●印のところで処理が中断されます。
例えばコンソールアプリであれば main の一番最後の return に●を付けて下さい。
<<プログラマが日常茶飯事に使う手法です>>

この回答への補足

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。

補足日時:2001/03/30 20:23
    • good
    • 0
この回答へのお礼

ありがとうございます、haru-pさん。

こんな便利な方法があったとは・・・試して見ます。
一応、Helpなどある程度目を通したんですが、これまた嫌がらせの様に
専門用語の嵐でして理解しきれませんでした。
使い勝手もよろしくないような気がします。なれれば良いのかもしれませんが・・・。

またよろしくお願いします。

お礼日時:2001/03/30 17:28

私と同じレベルですね(笑)。


翔泳社から発売になっている本がわかりやすいと思います。
VisualC++(1)はじめてのWindowsプログラミング
山本 信雄著、2,600円+税です。
続編があと2冊ありますが、極めて退屈な本なので、
(1)だけ買うのが正解だと思います。

で、答えなんですが、
プログラムを終わらせなければ、窓は閉じないはずなので、
getch()でキー入力を待つようなプログラムを組めばいいと思います。

この回答への補足

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。

補足日時:2001/03/30 20:15
    • good
    • 0
この回答へのお礼

ありがとうございます、KOH_daさん。

2,600円+税は今の私には手が出せません(T_T)
こういう本は何故かまるで嫌がらせのように高いですね。

getch()ですか・・・使い方がいまいちわかりませんが調べて見ます。
ありがとうございました。

お礼日時:2001/03/30 17:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルでDeleteキーを押しても計算式が消えないようにしたい!

エクセルで作成した表の列のセル内に、計算式を入力しています。
セル内の値をクリアする為にDeleteキーを押すと、計算式まで消されてしまいます。
ロックする方法はありますか?
教えて下さい。
お願いします。

Aベストアンサー

No.5です。すみません、編集しているうちに肝心な部分を消してしまいました。余計な"「オプション」ボタン”を消していませんね。はじめ不確かな記憶を頼りに書いて、後で検証しながら修正したつもりでした。

「編集」-「ジャンプ」で[セル選択]ボタンを押します。
[定数]を選択します。[数値]、[文字]、[エラー値」、「論理値」にチェックが入っています。[文字]のチェックをはずします。

バージョンも書いてなかった。
私もExcel2000です。

QC言語 コンソール VC6.0で

テキストファイルをfopenで読み込んだ後、
そのテキストが「何行で構成されているか」を知りたいのですが、
どうすればよいでしょうか?

改行の数を数える=何行かということだと思うのですが、
なかなかうまくいきません。よろしくお願いします。

Aベストアンサー

fgets()を利用して調べてみてはどうでしょう

----------------------------------------------------------------
char buf[256];
int count = 0;

while( fgets( buf, sizeof(buf)-1, fp ) != NULL ) count++;

----------------------------------------------------------------
fgets()は改行がくるまで読み込む関数ですので、
読み取れなくなるまで呼び出せば、それが行数となります。

※このプログラムは1行が最大255文字のテキストしか保障していません

Qテンキーのキー配置はなぜ計算機と電話が上下逆なのでしょうか。

私、よく計算の途中に電話をかける時や、FAXを打つ時に
1と7を間違えます。
なぜ?電話は上から123でPCや計算機が下から123なのでしょうか?
なぜ統一しないのでしょうか、当然時代の新しい方の
計算機が追従する物なのに。 (しかし何度やっても計算機のキー配置が使いやすいですねー。)

Aベストアンサー

こんなページがありましたよ。

参考URL:http://homepage2.nifty.com/osiete/seito193.htm

Qfor文の処理に時間がかかっているか。MFC VC++ 6.0 使用

今 私は MFC VC++ 6.0 を使用しています。

CModel::OnDraw(CDC *pDC)
{
(略)

(ここから)
for(int i=0;i<500000;i++){
なんらかの アルゴリズム
}

(ここまで)

(略)

}

上記に示した (ここから) (ここまで)に ドレくらい時間がかかっているか 時間を 計りたいのです。 かかったじかんを
pDC->TextOut(・・・・・)

と 画面に 表示させたいのですが、どうすればいいでしょうか?

参考書には 今の 時間(4時12分) などの現在の時刻を 表示させるものは 結構のってるのですが、私は 時刻ではなく for文を処理している 時間を しりたいのです。よければ 教えてください。

Aベストアンサー

わたしはGetTickCount()の関数は使ったことありませんが。

DWORD tStart = GetTickCount();

for(int i=0;i<500000;i++){
なんらかの アルゴリズム
}

// 処理にかかった時間(msec)
DWORD tElapsed = GetTickCount() - tStart;

Q%キーを使った計算の仕方をお教えください。

ここへ初めてお世話になりに来ました。小学生頃には数学は得意でしたが、70代が来てさっぱりになりました。割合=パーセントを出すのに小学生なみの計算をしています。(年金の計算に使います)。電卓のパーセントキーを使った事が有りません。これを使った計算の仕方をお教え下さい。

※国民年金(基礎年金)は満額が792,100円です。60歳の誕生日までの納付です。
制度発足の昭和36年4月1日現在で20歳を超えた人其々に=加入月数にばらつきがあります。
※A…加入月数に対するB…納付月数で=C…満額に対する支給年金額のようになっています。
年金特別便の記録面には左に国民年金、次に厚生年金、右が年金加入期間合計欄になっています。でも国民年欄には納付月数と加入月数が有り、それの合計欄もあります。(加入月数―納付月数で=未納月数が出ます)

○年金加入期間合計欄は=国民納付月数+厚生になっています。
○全上は=国民年金加入月数+厚生年金加入月数にはなっていません。
未納期間を引いた年金額の計算をする時、%キーを使った計算が出来ると良いのにと思いお教え頂きに参りました。

分かり難い文面ですが、例の数字なども入れてお教え下さるとありがたいです。よろしくお願申し上げます。

ここへ初めてお世話になりに来ました。小学生頃には数学は得意でしたが、70代が来てさっぱりになりました。割合=パーセントを出すのに小学生なみの計算をしています。(年金の計算に使います)。電卓のパーセントキーを使った事が有りません。これを使った計算の仕方をお教え下さい。

※国民年金(基礎年金)は満額が792,100円です。60歳の誕生日までの納付です。
制度発足の昭和36年4月1日現在で20歳を超えた人其々に=加入月数にばらつきがあります。
※A…加入月数に対するB…納付月数で=C…満額に対する支...続きを読む

Aベストアンサー

引き続きです^^

消費税込みの金額の元値の出し方ですが。。。

税込み金額が525円の商品の元値を計算する場合→
525(525をまず入力)÷(割るのボタンを押す)105(消費税は5%なので
元値を100と考えてプラス5%で105%となります)500(答えの数字が表示
されます)

○1…仮に431月に対して380月は=431月の何パーセントか

この場合。。。
380(380と入力)÷(割るのボタンを押す)431(431と入力)%(ここで%の
ボタンを押す)88.167(答えの数字が表示される)
約88%となります

○2…仮に満額792,000円に対して支給額が700,000円は=満額の何パーセントか。

この場合。。。
700,000(700,000と入力)÷(割るのボタンを押す)792,000(792,000と入力)
%(ここで%のボタンを押す)88.383(答えの数字が表示される)
約88%となります

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む

Qキーを押している間の時間を計算してくれるプログラム

はじめまして。
上記のようなプログラムを教えていただきたく、
投稿しました。

わたしは、心理学を専攻する大学院生です。
修士論文の実験でこのようなツールが必要となり、
学校のコンピュータルームに相談に行ったところ、
JavaScriptという言語で、このようなプログラムが
作れると聞き、ここ1月格闘してまいりました。

しかし、プログラムに関してはまったくの素人で、
お手上げ状態です。
したがって、こちらで皆さんのお助けを願ったしだいです。

概要は以下の通りです。
指定した時間の間(たとえば5分間)に、
1.何回キーを押したのか、
2.各回ごとに、どのくらいの時間(ミリ秒単位)押したのか
3.キーを押していた合計時間を測定したいと思っております。

そのために、以下の機能を備えたプログラムを求めています。
1.タイマー機能がついていること(実験開始と終了の操作が自動でできる)。
2.実験を開始・終了した時刻が取得できる。

3.各回のキーを押し始めた時刻が取得できる。
4.各回のキーを離した時刻が取得できる。

以上の説明、わかりにくい点もあるかと思います。
資金に余裕のない学生なので、
ソフトを購入することはできません。
この本を読めば分かる、といったアドバイスもありがたいのですが、プログラムがとても苦手のようです。
これらの点を考慮して、お助けいただける方、
ご回答お願いいたします。

はじめまして。
上記のようなプログラムを教えていただきたく、
投稿しました。

わたしは、心理学を専攻する大学院生です。
修士論文の実験でこのようなツールが必要となり、
学校のコンピュータルームに相談に行ったところ、
JavaScriptという言語で、このようなプログラムが
作れると聞き、ここ1月格闘してまいりました。

しかし、プログラムに関してはまったくの素人で、
お手上げ状態です。
したがって、こちらで皆さんのお助けを願ったしだいです。

概要は以下の通りです。
指定した時間の...続きを読む

Aベストアンサー

一応
>以下の機能を備えたプログラム
を作ってみました。IE用です。
昨今のマシン(メモリやCPU)では、あまり問題にならないスピードで動くとは思いますが、1ミリ秒の精度があるかというと(値は求まっても)かなり疑問です。(データが増えるにつれて画面の更新の時間も(ミリ秒という精度では)影響するかもしれません)
多分、集計するプログラム(処理)は別にあるものと想定し作っていません。
エンターキーを押すと開始します。(マウスで開始ボタンをクリックしても良い)
エンターキーによる開始の場合最初にエンターキーのキーアップが記録されます。
あとは、適当にキーを押します。
-----8<-----8<-----8<-----8<-----8<-----8<-----
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS">
<title>限定された時間内に押されたキーの時間を集計する</title>
<script language="JScript">
<!--
var keyPushState=false; //キーが押されていない
var result; //結果を表示するテキストエリア
var time; //キーが押された時間
var IntervalID;//実行時間制御

window.onload=init;
function init(){
document.body.onkeydown=keyDown;
document.body.onkeyup=keyUp;
document.getElementById("startButton").focus();
result = document.getElementById("result");
IntervalID=undefined;
}
function keyDown(){
time = new Date();
if(!keyPushState){//キーが既に押されている状態である
keyPushState=true;
result.value += String.fromCharCode(window.event.keyCode)+":KeyDown at "+timeFormat(time)+"\n";
}
}
function keyUp(){
time = new Date();
result.value += String.fromCharCode(window.event.keyCode)+":KeyUp at "+timeFormat(time)+"\n";
keyPushState=false;
}
function timeFormat(t){// HH:MM:SS.sss
return (
ZeroFormat(t.getHours(), 2)+":"+
ZeroFormat(t.getMinutes(),2)+":"+
ZeroFormat(t.getSeconds(),2)+"."+
ZeroFormat(t.getMilliseconds(),3)
);
}
function ZeroFormat(num, n){// ZeroFormat(1,3) => "001"
var ret=""+num;
while(ret.length < n){
ret = "0" + ret;
}
return (ret);
}
function start(){
if(IntervalID==undefined){
document.body.onkeydown=keyDown;
document.body.onkeyup=keyUp;
result.value="開始時間"+timeFormat(new Date())+"\n";
IntervalID=setInterval("start()",5*60*1000);//5分
} else {
result.value+="終了時間"+timeFormat(new Date())+"\n";
document.body.onkeydown=null;
document.body.onkeyup=null;
clearInterval(IntervalID);
alert("終了しました");
}
}
//-->
</script>
</head>
<body>
<button id="startButton" type="button" onclick="start()">開始</button><br>
<textarea id="result" cols="60" rows="30" READONLY></textarea><br>
もう一度実行するときは、画面を更新して下さい。
</body>
</html>

一応
>以下の機能を備えたプログラム
を作ってみました。IE用です。
昨今のマシン(メモリやCPU)では、あまり問題にならないスピードで動くとは思いますが、1ミリ秒の精度があるかというと(値は求まっても)かなり疑問です。(データが増えるにつれて画面の更新の時間も(ミリ秒という精度では)影響するかもしれません)
多分、集計するプログラム(処理)は別にあるものと想定し作っていません。
エンターキーを押すと開始します。(マウスで開始ボタンをクリックしても良い)
エンターキーによ...続きを読む

QVC++6.0で作成したクラスをVB6.0で使うには?

初めて投稿します。
プログラミング初心者の為、初歩的な質問になるかもしれませんがご容赦下さい。普段、主にVisual Basic6.0(以下VB6.0)でプログラミングを行なっています。
VB6.0には演算子のオーバーロードする機能がない(?)ため、Visual C++6.0(以下VC++6.0)でプログラミングを行い、VC++6.0で作成したクラスをVB6.0で呼び出して使用したいと考えています。
インターネット上でいろいろと調べてみたのですが、その方法がわからず投稿させていただきました。VC++6.0で作成したDLLの中の関数をVB6.0で呼び出して使用する方法はわかったのですが、クラスということになると、DLLでは無理なのでしょうか?
どなたか、VC++6.0で作成したクラスをVB6.0で呼び出す方法、または勉強方法(教材)などを教えていただけると助かります。
宜しくお願いいたします。

Aベストアンサー

 こんばんは。

 純粋なC++では無理ですが、要はCOM/OLE/ActiveX等、そっち系で作成すれば可能です。
 但し、operator += ()等の様なオーバーロード演算子は不可能です。

 COMを1から実装するのは、顔が歪む程大変な事なので、MFCやATLを使用した方が効果的です。

 ATLの使用方法と実装については、以下が参考になります。
 http://www.koutou-software.co.jp/junk/use-atl-mystruct.html

 自身で検索する際には
 「COM OLE ActiveX ATL IDL バイナリインターフェース」等のキーワードを使うと見つかり易いでしょう。

 後、私の所有しているCOMの書籍によれば、「GUID」を作成する際、オフライン状態で作成すると、世界全国の誰かが作成した「GUID」と衝突を起こす可能性があると書いてありました。
 恐らく、ATL等のウィザードでコードを自動作成している時、一緒に作成される「GUID」にも、同じ事が言えるかもしれません(多分その筈)。
 取り敢えず、オンライン状態で着手される事を、強くお勧めします。

 こんばんは。

 純粋なC++では無理ですが、要はCOM/OLE/ActiveX等、そっち系で作成すれば可能です。
 但し、operator += ()等の様なオーバーロード演算子は不可能です。

 COMを1から実装するのは、顔が歪む程大変な事なので、MFCやATLを使用した方が効果的です。

 ATLの使用方法と実装については、以下が参考になります。
 http://www.koutou-software.co.jp/junk/use-atl-mystruct.html

 自身で検索する際には
 「COM OLE ActiveX ATL IDL バイナリインターフェース」等のキーワードを使...続きを読む

Q計算機のキーの機能

単純な質問ですみませんが、知らないので教えてください。キーにCEってありますよね?これはどういう機能なのですか?Cはクリアで意味が通るんですが、CEもクリアとして使えるようですし。
よろしくお願いします。

Aベストアンサー

#1です補足です。
例えば、5+5の計算の時、間違って、5+6を入力したとしますと、Cを押すと、すべてがクリアされるので、最初からやり直しです。

CEを押して、6を入力すると、5+6の結果が=で得られますので。

QVC++6.0のリンクエラーです。

winmm.lib でinvalid or corrupt file のリンクエラーです。使用OSはXPです。 どうすればよいのでしょうか?

Aベストアンサー

invalid:無効
corrupt:壊れている

ライブラリが壊れてるようなので、一度修復なり再インストールなりする必要があるんじゃないですかねぇ。


人気Q&Aランキング

おすすめ情報