ページ 11

ひらがな

Posted: 2014年8月03日(日) 10:42
by Cひさしぶり

コード:

#include <stdio.h>
int main (void){
  char	input[256];
  wchar_t    cc;
  printf("ひらがな一文字を入力してください");
  fgets (input, sizeof(input), stdin);
  cc=input[0];
  printf("%c",cc);
  if (L'あ' == cc)
   printf("含む");
}
Windows8 gccを使用しているものです。
キーボードからひらがなを入力し、'あ'の文字と等しいか比べたいです。
プログラムをコンパイルすると
test2hm.c: In function 'main':
test2hm.c:9:7: error: converting to execution character set: Illegal byte sequen
ce
if (L'あ' == cc)
とエラーがでます。
方法があれば、教えてください。お願いします。

Re: ひらがな

Posted: 2014年8月03日(日) 11:59
by みけCAT
fgets関数の代わりにfgetws関数を用いてみてください。
input変数の要素の型をwchar_tにしてください。
printf関数に渡している書式を%cから%wcにしてください。

Re: ひらがな

Posted: 2014年8月03日(日) 12:19
by かずま
次のようにしてコンパイルするとどうなりますか?

gcc --input-charset=cp932 test2hm.c

また、cygwin で gcc を使っているのなら

od -tx1z test2hm.c | tail

の出力はどうなりますか?

Re: ひらがな

Posted: 2014年8月03日(日) 13:59
by hoge
みけCAT さんが書きました: printf関数に渡している書式を%cから%wcにしてください。
えぇ~! %wcはMicrosoft方言です。
ISO C準拠の%lcを推奨します。

Re: ひらがな

Posted: 2014年8月03日(日) 19:52
by みけCAT
hoge さんが書きました:
みけCAT さんが書きました: printf関数に渡している書式を%cから%wcにしてください。
えぇ~! %wcはMicrosoft方言です。
ISO C準拠の%lcを推奨します。
確かにideone.comで%wcは認識されないようです。
テストせずに適当なことを書き込んでしまい、申し訳ありません。

Re: ひらがな

Posted: 2014年8月05日(火) 18:46
by Cひさしぶり
fgetws関数を使って、input変数を wchar_t型にしてみると、
test2hm.c: In function 'main':
test2hm.c:9:7: warning: multi-character character constant [-Wmultichar
if ('あ' == cc)
とエラーがでます。
>gcc --input-charset=cp932 test2hm.c -o test2hm.cを実行すると、
test2hm.c: In function 'main':
test2hm.c:9:7: warning: multi-character character constant [-Wmultichar]
if ('あ' == cc)
とエラーがでます。
お返事お願いします。

Re: ひらがな

Posted: 2014年8月05日(火) 18:50
by みけCAT
if ('あ' == cc)ではなく、ちゃんとif (L'あ' == cc)と書いてください。

Re: ひらがな

Posted: 2014年8月05日(火) 20:29
by YuO
<wchar.h>系の入出力関数を使うのであれば,

コード:

#include <locale.h>
と,mainの最初あたりでの

コード:

setlocale(LC_CTYPE, "");
を忘れずに。
setlocaleしなかった場合のロケールはCロケールとなっているため,日本語は恐らくまともに扱えません。
オフトピック
現在のシステムのロケールに合わせる(第二引数が"")設定で,日本語が扱えるかは別の話ですが。
日本語用のロケールが用意されていなければ,setlocaleしても日本語は取り扱えないですし。
かといって,第2引数の指定方法はimplementation-defined……。

Re: ひらがな

Posted: 2014年8月06日(水) 03:37
by かずま
Cひさしぶり さんが書きました: >gcc --input-charset=cp932 test2hm.c -o test2hm.cを実行すると、
出力ファイル名をソースファイル名と同じにすると、ソースファイルが消えてしまいます。
Windows 用の gcc だったら、-o test2hm だけで、test2hm.exe を作ってくれるはずです。

それから、od コマンドの実行結果は教えてくれないのですか?
お返事お願いします。

Re: ひらがな

Posted: 2014年9月04日(木) 16:01
by Cひさしぶり
'od' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示がありました。