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

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

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

#1

投稿記事 by マジスー » 15年前

半角英数字での分岐ができますが、全角を使うとできません
プログラミングを始めてばかりの初心者なので、お願いします

#include <stdio.h>

int main()
{
  char ch;

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

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

return 0;
}

みけCAT

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

#2

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

%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++)

#3

投稿記事 by マジスー » 15年前

ありがとうございます
本当に助かりました
おかげで学んだことも多かったです

KEYONN_

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

#4

投稿記事 by KEYONN_ » 15年前

みけ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++)

#5

投稿記事 by たかぎ » 15年前

処理系不明なので、"あ"が(ナル文字を含めて)3バイトだと決め打ちにするのは危険です。

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

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

wchar_t wc;

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

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

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

マジスー

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

#6

投稿記事 by マジスー » 15年前

お早い回答ありがとうございました
また質問しに来ます

閉鎖

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