マイクロソフト社のVC++を使っているのですが、
Win32console Appllicationでプログラムを組んで
実行するときに、(MSdosが起動)
入力する数値が二つあるとして
一つ目をいれて、二つ目を入れているときに
一つ目の間違いに気づいて入力し直そうとしても
もう一つ目のところにカーソルが移動できず
それを一回終了してから最初からやり直す方法しかわかりません。
入力を正す方法を教えてください。

A 回答 (3件)

No.1で回答した者です。


補足です。
カーソル位置の指定は1で示した通りですが、内部ロジック的には特定のキーの入力があった場合に前項目の入力部分にカーソルを移動しつつ前回の入力(画面に残っている文字列)の消去(スペースで上書きします)、前項目の入力処理の再実行が必要になります。
もっと単純にやるのであれば、入力画面全体のフォーマットを決めておいて再入力の際には全体を再描画する手ですが、こちらは画面のちらつきが気になる向きにはお勧めできません。
    • good
    • 0

scanf 等でコンソールからデータを入力しているのですよね?


プログラム上で訂正できるルーチンを組み込んでおくしかありません。

while(1) {
 scanf ("data 1> %d", &a);
 scanf ("data 2> %d", &b);
 scanf ("OK? (y/n) %s", s);
 if (s[0] == 'y') break;
}

など...。
    • good
    • 0

手元に書籍がないので正確に書けないため具体的には書けませんが・・・。


お持ちのC言語のテキスト等でエスケープシーケンスという項目をしらべてみて下さい。
カーソル位置の制御ができますのでこれを使って任意の場所で入力操作をやり直すことが出来ます。
尚、ここではprintfと組み合わせて使用します。
    • good
    • 0

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

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

QConsole.ReadLine()で、入力デフォルト値を指定できます

Console.ReadLine()で、入力デフォルト値を指定できますか?

C#でプログラムをつくっています。
Console.ReadLine()を使えば、コマンドプロンプト上からのキー入力を文字列として受け取れますが、最初は空の状態です。
例えば、

string s = Console.ReadLine()

を実行し、Enterキーを押すと、sは何も入力されませんが、デフォルト値を指定することで、ユーザーがただEnterキーを押したときに、デフォルト値を返すような方法はありますか?
また、指定したデフォルト値を画面上に表示し、ユーザーが編集できるような方法はありますでしょうか?

どうぞよろしくお願いします。

Aベストアンサー

何だかよさそうなもの見付けましたよ。

説明(英語): http://tirania.org/blog/archive/2008/Aug-26.html
ライブラリ(これを取り込む): http://anonsvn.mono-project.com/source/trunk/mcs/tools/csharp/getline.cs

LineEditorのEdit()メソッドは第1引数がプロンプトで第2引数が初期値のようです。
C#の基本ライブラリのみに依存し、外部プログラムは必要ないそうです。
ライセンスも制限が緩いもののようです。

QVC++でカーソルを固定する

VC++のver6.0を使用している者です.

今回「カーソルがウィンドウの中心に固定されていて,左ボタンをクリックすると自由に動かすことができ,もう一度クリックするとカーソルは初期位置に戻り,再び固定されて動かすことが出来ない」というアプリを作成しようと思っています.

コンセプトとして,
・ウィンドウズメッセージハンドラのWM_LBUTTONDOWNを用いる
・BOOL型の変数を用意し,左ボタンが押される度に真偽を入れ替える
・TRUEの状態ならば自由にカーソルを動かせる
・FALSEの状態だとウィンドウの中心に固定される(マウスを動かしてもカーソルは動かない)
という感じにしたいと考えています.

しかし,カーソルを固定,およびその解除の方法が分かりません.どのようにやればよいのでしょうか…よい方法がありましたら,ご教授ください.

よろしくお願いします.

Aベストアンサー

> カーソルはマウスカーソルを使おうと思ってます.

不具合があったり、使い方を知らない人が使うと終了の操作が出来なかったり、問題が多いですが…。
ジョークソフトなんかで作った記憶はあります。

その場合は、カーソルの描画はWindowsがやってくれますので、特別な処理は不要です。
マウスが移動したOnMouseMoveのイベント時、固定するモードだったら、::SetCursorPosで位置を固定して、CWnd::OnMouseMoveのオーバーライドを行わせないとかで良かったかと。

QWin32 Console Applicationで作った実行ファイルのアイコン変更

前に同じような質問をしましたがMFC AppWizardの変更の仕方ではなくWin32 Console Applicationで作成した実行ファイルのアイコンを変更したいのですがどうしたらいいでしょうか?
プロジェクトごとに違うということを知らなかったので、記述することができませんでした。
どうか教えてください。

Aベストアンサー

1.リソーススクリプト(.rc)をプロジェクトに新規追加
2.リソースにアイコンを追加。

IDは何でもかまいませんが、アイコンを複数作成した場合は一番小さいIDのものがexeのアイコンになります。

#ウィンドウの左上や、タスクバーに表示されるアイコンとは別物です。

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

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&Aランキング

おすすめ情報