ページ 11

全角文字でif分岐(C++)

Posted: 2010年10月06日(水) 16:32
by マジスー
半角英数字での分岐ができますが、全角を使うとできません
プログラミングを始めてばかりの初心者なので、お願いします

#include <stdio.h>

int main()
{
  char ch;

printf("一文字入力してください\n");
scanf("%c",&ch);

if (ch == "あ") printf("正解です");
else printf("違います");

return 0;
}

Re:全角文字でif分岐(C++)

Posted: 2010年10月06日(水) 16:46
by みけCAT
%cは1バイトしか読み込めないので、この方法では無理です。

これでどうですか?
#include <stdio.h>
#include <string.h>

int main() 
{ 
    char ch[3]={0,0,0};

    printf("一文字入力してください\n");
    scanf("%2s",ch);
    if (strcmp(ch,"あ")==0) printf("正解です");
        else printf("違います");

    return 0;
}

Re:全角文字でif分岐(C++)

Posted: 2010年10月06日(水) 17:38
by マジスー
ありがとうございます
本当に助かりました
おかげで学んだことも多かったです

Re:全角文字でif分岐(C++)

Posted: 2010年10月06日(水) 20:25
by KEYONN_
みけCATさんとほぼ同じですが、C++のcinとcoutを使ってみました。

#include<iostream>
#include<string.h>

using namespace std;

int main()
{
char str[3];
cout << "1文字入力してください->";
cin >>str;
if(strcmp(str,"あ")==0) cout << "正解です。\n";
else cout << "不正解です。\n";

return 0;
}

Re:全角文字でif分岐(C++)

Posted: 2010年10月06日(水) 22:21
by たかぎ
処理系不明なので、"あ"が(ナル文字を含めて)3バイトだと決め打ちにするのは危険です。

char ch[MB_LEN_MAX + 1] = { 0 };

としておくべきでしょう。
ロケールが日本語に対応するのであれば、

wchar_t wc;

setlocale(LC_CTYPE, ""); /* ロケールの設定は環境にあわせること */

scanf("%lc", &wc);
if (wc == L'あ') printf("正解です");
...

とするのもよいでしょう。

Re:全角文字でif分岐(C++)

Posted: 2010年10月13日(水) 17:38
by マジスー
お早い回答ありがとうございました
また質問しに来ます