• ベストアンサー

scanf( )で日本語を入力する方法を教えてください。

こんにちは、現在C言語とC++を勉強中の者です。 コンパイラーは、Borland C++を使っています。 scanf( )では、日本語を入力できないと思っていました。 ところが、「猫でもわかるプログラミング」では日本語を入力できています。 ただ、使用しているコンパイラーがVC++なのです。 日本語入力はコンパイラーによるものなのでしょうか? 調べてもわかりません。 OSは、WINDOWS-ME です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.5

>プログラムで強制的に入力モードの変更はできないものでしょうか? IMM系のAPIでできそうだと思ったのですが、試したところうまく動作しませんでした。DOS窓上では無理なのか、私のスキルが足りないのかはわかりませんが...。(IMM系APIについては「猫でも...」の「Windows SDK編」の278章から書いてあります。) そこで、ちょっとズルをして、キーボード入力をソフト的に送る方法を考えました。おそらくwahhahha_2002さんの環境でも動作すると思うので試してみてください。(なお、インデントに全角スペースを使用しています。コピーして使う場合はタブにでも置き換えてください) ----------------------------------------------- #include <stdio.h> #include <windows> /* Alt + [半角/全角] */ void ChangeMode(void) {   keybd_event(VK_MENU, 0, 0, 0);   keybd_event(VK_KANJI, 0, 0, 0);   keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);   return; } int main() {   char buf[256];   ChangeMode();   printf("好きな言葉を入力してください:");   scanf("%s", buf);   printf("あなたは「%s」と入力しました。\n", buf);   ChangeMode();   return 0; }

wahhahha_2002
質問者

お礼

gimmickさん、ありがとうございます。 アドバイスのソースをBorland C++で、早速コンパイルしてみました。 すると、エラーの続出。 自分は、超・超・初心者なので3分くらい理解できませんでした。 エラーを確認すると、ソースの毎行にあります。 ん? ’ ’が不正文字? もう一度アドバイスを読み返し、「インデント」「タブ」を調べました。 「なんで、CのソースにHTMLのタブが?」 いやー、申し訳ない。わかりました。 早速、空白を調べて削除し、全角の空白から半角の空白に変更したところ、 見事、成功! 早速使わせていただきます。 本当にありがとうございます。重ねて御礼を申し上げます。

その他の回答 (4)

  • abon
  • ベストアンサー率33% (4/12)
回答No.4

私の知る限りでは無理っぽいかも・・・ですね・・・。 強制的ではなく、そのプログラム使用者が入力する時に、 プリント文で日本語入力を促すような注意書きのようなものを示しておく では駄目ですか? 「日本語入力をする場合は」 「WINDOWS9x使用の方は[Alt] と [全角/半角]」 「WINDOWSNT系使用の方は[Alt]と[半角/全角]で変更できます。」 ・・・というような感じに。 必ず出来ない・・・とは私の知識範囲内ではいえませんが、 プログラムは「簡略化」が大事な事なのでコレはコレでいいと思います。 (駄目?(^^;;) もしかしたらWINDOWSの環境変数やメモリなんかから読み込んで・・・ なんてことが出来るかもしれませんが、 かなり難しい処理になってしまうのではないでしょうか?

wahhahha_2002
質問者

お礼

abonさん、私の質問にお答えくださいまして ありがとうございます。 子供向けのパソコンと遊ぶプログラムを作成しようとしていましたが、この「日本語入力」のところでつまづいてしていました。CやC++は、自分には無理なのかな?と諦めかけていたところです。 abonさんの親切・丁寧なアドバイスが、今励みとなりました。

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.3

既に回答がされていますが、scanfでの日本語入力には特別な処理は必要ありません。WindowsMeのDOS窓で入力するのであれば、「Alt + 全角/半角」で日本語モードにしてから入力してください。

wahhahha_2002
質問者

お礼

ご親切なアドバイスをありがとうございます。 ご指示通りの方法で、できました。 ただ勝手なお願いなのですが No2さんでもおねがいしたように、 プログラムで強制的に入力モードの変更はできないものでしょうか? ご存知でしたら、てがかりでもお教えください。

  • abon
  • ベストアンサー率33% (4/12)
回答No.2

下記のアドレスにDOSで日本語入力をするためのことが書いてあります。 どうしても日本語入力したいのであれば、下記のアドレスにある、 「使用する日本語入力システムのマニュアルに従って、システムファイル"config.sys"に設定する行を追加します。」 この動作をするプログラム事態を作ってしまうと楽かもしれません。

参考URL:
http://www.jpsa.or.jp/ps-net/psnetMNT-59.htm
wahhahha_2002
質問者

お礼

度重なるご親切なアドバイスをありがとうございます。 すでに自分が作成したプログラムでも アドバイス通りの方法で日本語で入力する事ができ、それをコンピューター側が日本語で表示できました。 ただ、この入力方法の変更をプログラムの中に組み込んだ方がスムーズみたいです。 [Alt]キーと[半角/全角]キーの動作をユーザーに求めるのではなく、日本語入力が必要な場面では 日本語入力モードにし、入力終了後はただちに 半角に変更するようなプログラムをつくる必要があるのかと。 非常に安易な考えの 勝手なお願いですが、 ご指摘の「システムファイル"config.sys"に設定する」方法ではなく、その都度日本語入力モードにし、入力終了後はただちに 半角に変更するようなプログラムをつくる方法はあるのでしょうか?

  • abon
  • ベストアンサー率33% (4/12)
回答No.1

DOSで日本語が打てない・・・というだけではないでしょうか? 自分のOSはXPなため、コマンドプロンプトという形であるゆえ、 MEのDOSのことは良く分かりませんが・・・。 とにかく日本語入力はDOSプロンプトに依存してると思います。

wahhahha_2002
質問者

補足

早速のアドバイスをありがとうございます。 どうやら、質問の説明不足のようでした。ごめんなさい。 質問の内容は、現在C言語を勉強しています。 そのプログラムは、コンピュータとの簡単な会話をするものです。 そのプログラムを実行させた時に、ユーザー側から日本語で入力できる方法をしりたいのです。 コンピューター側からの質問をDOS上に表示する時は、もちろん日本語でできます。 例えば、「あなたの名前を入力してください」とです。 ところが、実行ファイルでは ユーザー側からの入力がアルファベットだけに限られてしましいます。 例えば、「yamada hanako」です。 これに答えて コンピューターは「こんにちは、yamada hanakoさん」となってしまいます。 これをユーザー側が 日本語の「山田花子」と入力でき、 コンピューターは「こんにちは、山田花子さん」と表示するようなプログラムを作成したいのです。 現在の私の知識では それは不可能なのですが、先日見た「猫でもわかる・・・」では 日本語入力していました。ライブラリがどうのこうのと書いてあるのですが、どうすれば私の環境でそれが可能になるのかと悩んでいるしだいです。 よろしくお願いいたします。

関連するQ&A