ひらがな

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

ひらがな

#1

投稿記事 by Cひさしぶり » 11年前

コード:

#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)
とエラーがでます。
方法があれば、教えてください。お願いします。

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

Re: ひらがな

#2

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

fgets関数の代わりにfgetws関数を用いてみてください。
input変数の要素の型をwchar_tにしてください。
printf関数に渡している書式を%cから%wcにしてください。
最後に編集したユーザー みけCAT on 2014年8月03日(日) 19:53 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: ひらがな

#3

投稿記事 by かずま » 11年前

次のようにしてコンパイルするとどうなりますか?

gcc --input-charset=cp932 test2hm.c

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

od -tx1z test2hm.c | tail

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

hoge

Re: ひらがな

#4

投稿記事 by hoge » 11年前

みけCAT さんが書きました: printf関数に渡している書式を%cから%wcにしてください。
えぇ~! %wcはMicrosoft方言です。
ISO C準拠の%lcを推奨します。

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

Re: ひらがな

#5

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

hoge さんが書きました:
みけCAT さんが書きました: printf関数に渡している書式を%cから%wcにしてください。
えぇ~! %wcはMicrosoft方言です。
ISO C準拠の%lcを推奨します。
確かにideone.comで%wcは認識されないようです。
テストせずに適当なことを書き込んでしまい、申し訳ありません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Cひさしぶり

Re: ひらがな

#6

投稿記事 by Cひさしぶり » 11年前

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)
とエラーがでます。
お返事お願いします。

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

Re: ひらがな

#7

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

if ('あ' == cc)ではなく、ちゃんとif (L'あ' == cc)と書いてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: ひらがな

#8

投稿記事 by YuO » 11年前

<wchar.h>系の入出力関数を使うのであれば,

コード:

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

コード:

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

かずま

Re: ひらがな

#9

投稿記事 by かずま » 11年前

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

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

Cひさしぶり

Re: ひらがな

#10

投稿記事 by Cひさしぶり » 11年前

'od' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示がありました。

閉鎖

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