• 締切済み

C言語の非標準コンソール関数getch()について(2)

こんにちは。Windows98環境でのC言語の質問です。 以前質問したタイトルの事について、良い回答を頂いたのですが、うれしさのあまり、自分で実行してみる前に締切ってしまい補足の質問をすることができなくなってしまったので、すいませんがここでさせて頂きたいと思います。 以前の質問内容に関しては、そちらを見ていただきたいと思います。 その時は、leaz024さんに良回答を頂いたので、その方法を試してみました。cscanfを使うと改行が行われない為、 (略) printf("a= "); cscanf("%d",&a); printf("入力終了"); (略) があったときに画面からa= の表示が消えてしまい、入力終了だけが表示されてしまいます。また、他にも問題があったので、二つ目の方法を実行してみたいと思いました。 >scanfの前に__flush_win95_keyup_events() を呼び出すことで回避できます。 ということなので、これを記述してみたのですが、(ソフトはMicrosoft Visual C++)次のようなエラーが出てしまいました。 C:\Windows\デスクトップ\R_and_wL\program.c(36) : warning C4013: 関数 '__flush_win95_keyup_events' は定義されていません。int 型の値を返す外部関数と見なします。 リンク中... program.obj : error LNK2001: 外部シンボル "___flush_win95_keyup_events" は未解決です Debug/R_and_wL.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 何かヘッダファイルをインクルードしなければならないのでしょうか? 以上なのですが、宜しくお願い致します。 また、他の解決策でも良いので宜しくお願い致します。 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=187990

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

leon-10さん、すみません、leaz024です。 まず、cscanf についてですが、この関数は少し癖があるんですよ。 例えば、数値入力時には、数字以外のキーが押された時点で入力が終了されてしまいます。 また、入力終了のために打った Enter で、カーソル位置を一番左に戻してしまうため、その後何かを表示すると、それまで表示していた内容の上に上書きされてしまいます。 (数字だけをたくさん入力すれば、「入力終了」が表示されても、入力した内容が残って見えるはずです。) なので、特に getch による問題が起きないところなら、scanf を使った方が良いです。 それから、__flush_win95_keyup_events については、私の調べが足りませんでしたね、すみませんでした。 私は Borland C++ 5.5.1 for Win32 を使用しているので、VC++ はちょっと分からないんですよ^^; ちなみに上記では、conio.h の中に __flush_win95_keyup_events が宣言されていました。 多分ドキュメントが書かれていると思うので、conio.h の中を読んでみてはどうでしょうか。

関連するQ&A

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

  • C言語についてです。

    プログラムを実行しようとすると、 main.obj : error LNK2001: 外部シンボル ""void __cdecl DrawGameOver(void)" (?DrawGameOver@@YAXXZ)" は未解決です。 fatal error LNK1120: 外部参照 1 が未解決です。 とでてしまいます。 どうすれば解決するのでしょうか? 初心者なのでなるべく分かりやすくお願いします。

  • CLapack C++

    現在、C言語の中で疑似逆行列を用いた最小2乗法によって データの処理を行いたいと考えています。 そのためにCLapackという線形演算ライブラリを visual studio 6.0に組み込みたいのですがうまくいきません。 研究で、ADボードやロボットマニピュレータを使うために  Win32 Application で自分でプログラムを書いています。 Win32 Console Application にCLapackを組み込む事は、 http://www.alab.t.u-tokyo.ac.jp/~bond/doc/clapack.html​ を見てうまくいったのですが、Win32 Applicationで組み込もうとすると、以下のようなエラーがでます。 リンク中... LINK : warning LNK4049: ローカル定義のシンボル "_free" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_fprintf" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "__iob" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_malloc" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_exit" がインポートされました clapack.lib(dlamch.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です clapack.lib(xerbla.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー プログラムに関する知識が乏しいため、解決できません。 またmath.hをインクルードすると大量のエラーがでます。 CLapackについて詳しい方がいらっしゃいましたら、 どうか教えていただけないでしょうか? よろしくお願いします。

  • C言語ソースのオラクルコンパイルについて

    VC(バージョン5.0)でビルドする際にエラーになってしまいます。 TEST001.obj : error LNK2001: 外部シンボル "_sqlcxt" は未解決です Release/TEST001.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー というメッセージが出力されます。Googleでいろいろと調べると皆さんが引っかかるポイントのようですが、解決した人の方法とは異なるので、こちらで質問させて頂きました。 実行環境は OS :Windows 2000 Professional Oracle:Oracle9i Client 9.2.0 です。 Oracleが7.3.4から9.2.0にバージョンアップする事になり リコンパイルを上記環境で実行した時にエラーになります。 よろしくお願いいたします。

  • C言語のPathFileExistsについて

    visual studio 2010、C言語でPathFileExistsを使って ファイル有無のチェックをしようと試みましたが、 コンパイルエラーになってしまいました。 環境はwindowsXP、SP3です。 参考にしたいくつかのサイトでは、visual studio 2010ではPathFileExistsを使って ファイル有無をチェックできると書いてあったのですが、 visual studio 2010でもC言語だとPathFileExistsは使えないのでしょうか? TEST.C #include <stdio.h> #include <shlwapi.h> int main() {   char path[128];   sprintf( path, "c:\\tmp.txt" );   if ( PathFileExists(path) ){     printf("ファイル有\n");   }   else{     printf("ファイル無\n");   }   return 0; } TEST.OBJ : error LNK2019: 未解決の外部シンボル __imp__PathFileExistsA@4 が関数 _ main で参照されました。 TEST.EXE : fatal error LNK1120: 外部参照 1 が未解決です。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BI N\link.exe"' : リターン コード '0x460' Stop.

  • c言語とfortranの混在プログラミング

    cとfortranの混合プログラミングについての質問です。環境はWindows上でVisual studio 2005/Intel fortran 9.1です。 --c側(ctest6.cpp) #include <stdio.h> extern "C" void __stdcall fsub(){ printf("TEST PROGRAM!!\n"); } --fortran側(ftest6.f90) PROGRAM MAIN call FSUB END --エラー ctest6.obj:error LNK2019:未解決の外部シンボル_fsubが関数_mainで参照されました。 ftest6.obj:error LNK2019:未解決の外部シンボル_FSUBが関数_MAIN_で参照されました。 ftest6.exe:fatal error LNK1120:外部参照2が未解決です。 ---- __stdcall fsub()"の部分を過去の質問等を参考にし、色々(cのfsubを_fsubやfsub_にしたりと"_"を追加したり)と試してみたりしたのですが、上記のエラーがでてしまいます。fortran側で_FSUBと記入できない点が課題な気がしているのですが、ご教授いただけないでしょうか?

  • microsoft visual C++ でC言語のプログラミング

    プログラミングの超初心者です。 microsoft visual C++ 6.0を利用してC言語のプログラミングをしたいのですが,最も基本のhello worldを表示させようとしてビルドを行うと以下のようなエラーが表示されますが,解決法がわかりません. --------------------構成: hello1 - Win32 Debug-------------------- リンク中... LINK : fatal error LNK1104: ファイル "Debug/hello1.exe" を開けません。 link.exe の実行エラー hello1.exe - エラー 1、警告 0 解決法を教えていただけるとうれしいです. お願い致します.

  • C言語の非標準コンソール関数getch()について

    こんにちは。 あるプログラムを作っていると、次のような問題が起きてしまいました。 簡単なプログラムを例にして、説明したいと思います。 #include<stdio.h> #include<conio.h> #include<ctype.h> void main(void) { char ch; int i; do{ ch=getch(); putchar(toupper(ch)); }while(ch!='q'); printf("\n"); scanf("%d",&i); } これはgetch()関数を使い入力された文字を大文字にして画面上に出力するものです。(qが入力されるまで) その後に、意味はありませんが変数iに整数を入力して終了する。 ここで、問題になってくるのがこのプログラムを実行して、abcdefqと入力していくと、画面上にはABCDEFQと表示されます。そして、qが入力されたことでdo文が終了して改行が行われます。次にscanfによりいったん入力待ちになります。 この時、まだ、なにも入力していないにも関わらず、最後にgetchにより入力したqが表示されてしまいます。 qを消してscanfの入力をすればいいのですが、この問題を何とか解決したと思い質問しました。 scanfの後にgetchar()を使うときはscanf入力時の'\n'に注意が必要だということはわかるのですが、上に述べたような問題はこれに似ているのでしょうか? 参考書をみたり自分でもいろいろ試してみたのですがどうもうまくいきません。 どなたか、解決策を知っていたら是非教えて下さい。 できれば、getch()とscanfがどのように作用してこのようなことが起きてしまっているのか説明して頂けたら幸いです。 お手数ですが、みなさま、よろしくお願いいたします。

  • C++でのエラー LNK2001

    C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー

  • Visual C++ 初心者です。

    Visual C++ 2005 Express Editionをダウンロードしました。 void main() {printf ("Hello World"); getchar();} をビルドしたところ、 MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 とエラーが出ました。 何が問題なのでしょうか。 全く初心者で、周りに質問できる人もいなくて、このアプリケーションを使わなければいけない状況です。 諸事情あって今日はもうパソコンを開けないのかもしれませんので、 お礼は遅くなると思いますが、よろしくお願いします。

専門家に質問してみよう