Visual Studio C言語の質問

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Visual Studio C言語の質問

Re: Visual Studio C言語の質問

#10

by かずま » 7ヶ月前

input の中でループするのは変なので、書き換えてみました。

コード:

#pragma comment(lib,"user32.lib")
#include <stdio.h>   // printf, puts, fgets
#include <string.h>  // strcmp, strchr, strcpy
#include <windows.h> // keybd_event

char word[256], eng[256];

void change_kanji_mode(void)  // 全角半角切り替え
{
	keybd_event(VK_KANJI, 0, 0, 0);
	keybd_event(VK_KANJI, 0, KEYEVENTF_KEYUP, 0);
}

int isstrempty(const char *s) { return !*s; }

int isstrequal(const char *a, const char *b) { return !strcmp(a, b); }

int isstrascii(const char *s)
{
	while (*s)
		if (*s++ & 0x80) return 0;
	return 1;
}

void clear_newline(char *word)
{
	char *p = strchr(word, '\n');
	if (p) *p = '\0';
}

int input(void)
{
	while (1) {  // INPUT_JAPANESE:
		puts("このセルの中で英語化したい語を入力してください。\n"
			"  エンターで直さず次の語彙に行きます。\n"
			"  ASCII文字が一部入っていてもOKです。\"end\"で選択に戻ります。");
		change_kanji_mode();
		fgets(word, sizeof(word), stdin);
		change_kanji_mode();
		clear_newline(word);
		if (isstrempty(word)) {
			//printf("[%ld]{%s} is generated.\n", i, sLine[i].Word[2]);
			continue;
		}
		if (isstrequal(word, "end")) {
			change_kanji_mode();
			return 1;
		}
		if (!isstrascii(word)) break;
		puts(" 入力した語は全てASCIIです。変換不要。エンターを押して下さい。");
	}
	while (1) {  // INPUT_ENGLISH:
		puts(" 英語をASCIIで入力してください。");
		fgets(eng, sizeof(eng), stdin);
		clear_newline(eng);// コンソール入力
		if (isstrascii(eng) && !isstrempty(eng)) break;
		puts(" 不適切な入力!ASCII文字を入れて下さい!\n");
	}
	return 0;
}

int main(void)
{
	while (!input())
		printf("word=[%s], eng=[%s]\n", word, eng);
}
実行例

コード:

このセルの中で英語化したい語を入力してください。
  エンターで直さず次の語彙に行きます。
  ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
愛
 英語をASCIIで入力してください。
love
word=[愛], eng=[love]
このセルの中で英語化したい語を入力してください。
  エンターで直さず次の語彙に行きます。
  ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
あなた
 英語をASCIIで入力してください。
you
word=[あなた], eng=[you]
このセルの中で英語化したい語を入力してください。
  エンターで直さず次の語彙に行きます。
  ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
end
str_get_pointer_str_contained(text, word, front, rest) の意味が
分からないので省略しました。

Re: Visual Studio C言語の質問

#9

by かずま » 7ヶ月前

全角半角切り替えをコードの中に入れてみました。

コード:

#pragma comment(lib,"user32.lib")
#include <stdio.h>
#include <windows.h>

char word[256], eng[256], text[256], *a;
int front, rest;

void change_kanji_mode(void)  // 全角半角切り替え
{
	keybd_event(VK_KANJI, 0, 0, 0);
	keybd_event(VK_KANJI, 0, KEYEVENTF_KEYUP, 0);
}

int isstrempty(const char *s) { return !*s; }

int isstrequal(const char *a, const char *b) { return !strcmp(a, b); }

int isstrascii(const char *s)
{
	char c;
	while (c = *s++)
		if (c & 0x80) return 0;
	return 1;
}

char *str_get_pointer_str_contained(char *text, char *word, int front, int rest)
{
	return strcpy(text, word);
}

void clear_newline(char *word)
{
	char *p = strchr(word, '\n');
	if (p) *p = '\0';
}

int input(void)
{
	*word = '\0';
	while (1) {
		while (1) {  // INPUT_JAPANESE:
			puts("このセルの中で英語化したい語を入力してください。\n"
				"  エンターで直さず次の語彙に行きます。\n"
				"  ASCII文字が一部入っていてもOKです。\"end\"で選択に戻ります。");
			change_kanji_mode();
			fgets(word, sizeof(word), stdin);
			change_kanji_mode();
			clear_newline(word);
			if (isstrempty(word)) {
				//printf("[%ld]{%s} is generated.\n", i, sLine[i].Word[2]);
				continue;
			}
			if (isstrequal(word, "end")) {
				change_kanji_mode();
				return 1;
			}
			if (!isstrascii(word)) break;
			puts(" 入力した語は全てASCIIです。変換不要。エンターを押して下さい。");
		}
	CHANGE_SAME_LINE:
		// 取り出したMultiByte語の後からのポインタ=a
		a = str_get_pointer_str_contained(text, word, front, rest);
				
		while (1) {  // INPUT_ENGLISH:
			puts(" 英語をASCIIで入力してください。");
			fgets(eng, sizeof(eng), stdin);
			clear_newline(eng);// コンソール入力
			if (isstrascii(eng) && !isstrempty(eng)) break;
			puts(" 不適切な入力!ASCII文字を入れて下さい!\n");
		}
	}
}

int main(void)
{
	input();
	printf("text=[%s], eng=[%s]\n", text, eng);
}
実行例

コード:

このセルの中で英語化したい語を入力してください。
  エンターで直さず次の語彙に行きます。
  ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
愛
 英語をASCIIで入力してください。
love
このセルの中で英語化したい語を入力してください。
  エンターで直さず次の語彙に行きます。
  ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
end
text=[愛], eng=[love]
ただし、end を入力するときは、全角入力モードになっているので
ユーザが「漢字キー」を押す必要があります。

Re: Visual Studio C言語の質問

#8

by マット1 » 8ヶ月前

皆様、助言をありがとうございました。SYSTEM関数で少し遊ばれてみます。IMEの制御は一部のWEBサイトで行っているので言語によっては可能かと思いました。パスワードは半角固定ですから。しかし、銀行のオンラインサイトで全角と半角入力を切り替えなければならない場合が多いので、金額や口座番号を入れる時、ストレスがたまります。うまく行ったらご報告します!

これあからもよろしくお願いいたします。
MAT 拝

Re: Visual Studio C言語の質問

#7

by Bull » 8ヶ月前

古い記憶ですが、コンソールアプリケーションで IME の制御はできなかったような。
“C++ IME 制御” などと検索すると、いろいろサンプルプログラムも出てきますが、コンソールアプリケーションのものは見付からないので、できないのかもしれません。

Re: Visual Studio C言語の質問

#6

by Math » 8ヶ月前

https://www.adminweb.jp/command/display/index5.html

コンソールではchcpコマンドで表示される文字コードを変更することが可能です。

それでよければ Cのsystem 命令で制御できると思います

Re: Visual Studio C言語の質問

#5

by Math » 8ヶ月前

ラベル
INPUT_JAPANESE:
の直後、日本語入力に固定

INPUT_ENGLISH:
の直後、英語入力に固定

したいということでしたら コンソールとは関係なく
使っている”日本語入力システム”を切り替えないといけないですよ。

Re: Visual Studio C言語の質問

#4

by マット1 » 8ヶ月前

ご返信有難うございます!下のように日本語と英語入力をユーザーに促してます。現在は、ユーザーがキーボードで全角、半角を切り替えて入力してますが、入力数が多いため、自動的に切り替えられるようにしたいのです。

INPUT_JAPANESE:
printf("このセルの中で英語化したい語を入力してください。エンターで直さず次の語彙に行きます。\n");
printf(" ASCII文字が一部入っていてもOKです。\"end\"で選択に戻ります。\n");
fgets(word, sizeof(word), stdin); clear_newline(word);// コンソール入力
if (isstrempty(word))
{ printf("[%ld]{%s} is generated.\n", i, sLine.Word[2]);
continue;
}
if (isstrequal(word, "end"))
return(1);
if (isstrascii(word))
{ puts(" 入力した語は全てASCIIです。変換不要。エンターを押して下さい。\n");
goto JAPANESE_INPUT;
}

CHANGE_SAME_LINE:
a = str_get_pointer_str_contained(text, word,front,rest);// 取り出したMultiByte語の後からのポインタ=a

INPUT_ENGLISH:
printf(" 英語をASCIIで入力してください。\n");
fgets(eng, sizeof(eng), stdin); clear_newline(eng);// コンソール入力
if (!isstrascii(eng) || isstrempty(eng))
{
puts(" 不適切な入力!ASCII文字を入れて下さい!\n");
goto INPUT_ENGLISH;
}

Re: Visual Studio C言語の質問

#3

by Math » 8ヶ月前

>Win32コンソールから日本語を入力してその英語訳を入力させたいと考えてます。

どちらも入力ですか?

Re: Visual Studio C言語の質問

#2

by Math » 8ヶ月前

http://www2.koyoen.birdview.co.jp/~abcx ... -z111-.PNG

>C言語からコンソールの半角、全角をしてすることはできるのでしょうか

C言語からコンソールの半角、全角を指定することはできるのでしょうか

の具体的な意味がわからないのですが 無いと思います。

具体的にどの様なことをされたいのか疑似コードで示して頂けませんか?

Visual Studio C言語の質問

#1

by マット1 » 8ヶ月前

Visual Studio Communityでテキスト処理プログラムを作ってますが、Win32コンソールから日本語を入力してその英語訳を入力させたいと考えてます。C言語からコンソールの半角、全角をしてすることはできるのでしょうか?よろしくお願いします。

ページトップ