• ベストアンサー

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

  • scanf()についてお伺いいたします。

    当方C言語を勉強していますが初心者です。 分からないことが出たのでご教授いただけると幸いです。 scanfで数値を1以上、100以下で入力を制限したいのですが、その方法が調べても分かりませんでした。それともscanf()では制限はかけられないのでしょうか? scanf()で入力値の制限を設ける方法をご存知の方がいましたらご教授ください。 お手数ですが宜しくお願い致します。

  • 簡単なscanf文が、わかりません。

    #include <stdio.h> int main(void) { int data; scanf("%d",&data); /*入力部分*/ printf("%d\n",data); return 0; } 参考書には、キーで入力、enterキー押すと、はじめて文字が画面に表示されるとなってましたが。 実際は、enter押さずに、キーボードでキー入力した時点で文字が表示されますが、 どこが間違っているんでしょうか? コンパイラは、 Borland C++ Compiler です。 お願いします。

  • C言語のコンパイラ

    C言語の勉強がしたいと思っているのですが、コンパイラっていうんですかね、それについて少し調べてみたら 無料なら"Borland C++ Compiler"で、有料ならなんかかなり高いっぽいけど"Visual C++"っていうのがあることが解りました。 よくプログラミング系のサイトの人で"Borland C++"のコンパイラを利用してとてもプログラミングがしやすくなったということが書いてあるのですが、"Visual C++"と比べたらどっちの方がいいんですか?(やっぱり有料の方?) もし人それぞれなら、みなさんは両方あったらどっちを使いますか? 初心者なら無料ので十分すぎるのだとは思いますが、プログラマーみたいな人から見るとどうなのかな~と思ったので教えていただけますか。 お願いします。 ついでに"Visual C++"って言語があるんですかね?何かそんな風に書いてあるところもあったもんで。 かさねがさねお願いします。

  • C++でscanfは使えない?

    お盆休みを利用してC言語の勉強をしようと思っています。 さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。 PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。 #include "stdafx.h" #include <stdio.h> void main() { int n; scanf("%d",&n); } C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

  • scanfについて

    C言語について勉強してます。 入力した整数の下2桁と10の位とを表示するプログラムをscanfで作りたいのですが方法がよくわかりません。 前者については整数を100で割った剰余とすればよいのかと推測しています。後者については参考書を読んでも検討がつきません。 詳しい方、よろしくお願いします。

  • scanf関数を用いての標準演算子(*/+-%)の入力方法

    C言語超初心者のものです。 scanf関数を用いての標準演算子(*/+-%)の入力方法について質問があります。 例:17 / 5 = 3 において ”17”、 ”/”、 ”5” を各々キーボードから入力し、”3”の数値をDOS画面?上に表示させるものです。 ”17”、”5”はscanf関数を使いキーボードから入力できるのですが、”/”だけがどうしても標準演算子として認識させることが出来ません。 私は以下のプログラムを組んでいるのですが、 char num3;  ・・・(省略) printf("Please type in a operator: "); scanf("%c",&num3);  ・・・(省略) printf("%d %c %d is %d\n", num1, num3, num2, product); 無理やりコンパイルして、DOS画面?上に表示させても17 / 5=65536となってしまいます。 ”/”をプログラミングの中で認識させて、ディスプレイ上で例式が正常に表示されるようにしたいのですが、どうしても回答が3になりません。 多分1つの標準演算子が入力できれば、他の標準演算子も入力できると考えています。 どうすればキーボードから標準演算子をプログラミングに認識させることが可能になるのでしょうか? どなたか分かる方がいらっしゃいましたら教えて下さい。 また参考になるURLなどがあればそれも教えて下さい。 よろしくお願いします。

  • 必要な物

    これからC言語の勉強を始めて、98/95上などで動作するWindowsアプリケーションを作る事を目標に構えているんですが、統合開発環境(VC++等)は値段が高くて無理なので、Borland C++コンパイラとBCC Developerを併用して 何らかの形のをなんとかして作れればと思うんですけど やはりこれだけでは不充分なのでしょうか? 他にあると便利な物や必要な物などを教えて頂けると助かります。

  • scanf関数について

    質問があります。 最近C言語を勉強し始めたのですが、scanf関数を使うと以下のような警告が出ます。 「arning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。」 使用しているのは Visual C++ 2008 Express Editionです。

  • BCCでの日本語ファイル名の扱い

    こんにちは。 現在WindowsVistaで、Borland C++ Compiler 5.5(日本語版)を使い、プログラミングを行っています。 最近、bcc32.exeでソースファイルをコンパイルする際に、ソースファイルの名前に一部の日本語が含まれている場合は、コンパイルできないという事に気が付きました。 例えば、「161_ポインタの基礎.c」というソースファイルをコンパイル使用すると、以下の様にコンパイルエラーになります。 ------------------------------------------------------------ >bcc32 -c "161_ポインタの基礎.c" Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 161_ポツンタの基礎.c: エラー F1009 161_ポツンタの基礎.c: 入力ファイル '161_ポツンタの基礎.c' をオープンできない *** 1 errors in Compile *** ------------------------------------------------------------ どうやら、「イ」という文字を、コンパイラが「ツ」と認識してしまっているようです。 こういった問題の解決策をWebで検索したのですが、見つける事ができませんでした。 ちなみに、僕の使っているBCCはすでに日本語版ですので、日本語化が必要というわけではなさそうです。 そこで解決策を御提供頂きたいと思っています。 何でもいいので、よろしくお願い致します。

  • visualC++について

    C言語を勉強しようと思っているのですが、borland C++というコンパイラ(?)がダウンロード出来ないので、microsoft C++をダウンロードしたのですが、これで普通に勉強できますか? C言語の書籍はどれもコンパイラについてあまりに何も書いていないので結構困っています。 オススメのコンパイラがありましたらご教授して下さい。 お願いします。

専門家に質問してみよう