日本語のリアルタイム入力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
phobos

日本語のリアルタイム入力

#1

投稿記事 by phobos » 9年前

はじめまして。phobosです。よろしくお願いします。
早速なんですが、リアルタイムに文章入力の出来るプログラムを作っていて、
kbhitとgetchを使う方法を取っていたのですが、日本語をリアルタイム入力できるようにする
必要が出来てしまいました。
ですが、getchは日本語に対応しないということで、詰まってしまっています。
ですので、日本語をリアルタイム入力できる手法をご教授いただきたいです。
よろしくお願いします。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 日本語のリアルタイム入力

#2

投稿記事 by みけCAT » 9年前

まず、使用しているOSを教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

phobos

Re: 日本語のリアルタイム入力

#3

投稿記事 by phobos » 9年前

すみません、忘れてました。
Vistaで、VS2005を使ってます。

non
記事: 1097
登録日時: 9年前

Re: 日本語のリアルタイム入力

#4

投稿記事 by non » 9年前

どのような目的で必要なのでしょうか?
non

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: 日本語のリアルタイム入力

#5

投稿記事 by ISLe » 9年前

「日本語のリアルタイム入力」が示す仕様が曖昧ですね。
1) キートップにある文字を全角でも入力できるだけで良い
2) 漢字変換も必要(リアルタイムで無くなる気がしますが)
さて。

phobos

Re: 日本語のリアルタイム入力

#6

投稿記事 by phobos » 9年前

2の、「 漢字変換も必要」の方です。

non
記事: 1097
登録日時: 9年前

Re: 日本語のリアルタイム入力

#7

投稿記事 by non » 9年前

コード:

#include <stdio.h>
#include <conio.h>
int main(void)
{
	int key1,key2;
	char str[3]={'\0'};
	printf("Push any key\n");
	while(1){
		if(kbhit()){
			str[0]=key1 = getch();
			if(0x80<=key1 && key1<=0x9F || 0xE0<=key1 && key1<=0xFF){
				str[1]=key2 = getch();
				printf("%s",str);
			}
			else{
				putchar(key1);
				if(key1==0x0D){
					putchar('\n');
					break;
				}
			}
		}
	}
	return 0;
}
目的がわからないから違うかもしれないけど、シフトJISだと仮定して、テストプログラムを作りました。
non

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: 日本語のリアルタイム入力

#8

投稿記事 by ISLe » 9年前

マルチバイト文字もgetch()して文字型配列に追加していくだけで問題ないですよね。
そのままputcharすれば表示もできますし。

IMEで確定するまでがリアルタイムにならないという問題なのであれば、リアルタイムに取得したキー入力に対応してプログラム内部でよみがな文字列を作ってImmGetConversionList APIに渡して漢字変換したものを表示するというふうにすれば良いと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る