#10
by かずま » 5年前
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) の意味が
分からないので省略しました。
input の中でループするのは変なので、書き換えてみました。
[code]
#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);
}
[/code]
実行例
[code=text]
このセルの中で英語化したい語を入力してください。
エンターで直さず次の語彙に行きます。
ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
愛
英語をASCIIで入力してください。
love
word=[愛], eng=[love]
このセルの中で英語化したい語を入力してください。
エンターで直さず次の語彙に行きます。
ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
あなた
英語をASCIIで入力してください。
you
word=[あなた], eng=[you]
このセルの中で英語化したい語を入力してください。
エンターで直さず次の語彙に行きます。
ASCII文字が一部入っていてもOKです。"end"で選択に戻ります。
end
[/code]
str_get_pointer_str_contained(text, word, front, rest) の意味が
分からないので省略しました。