ページ 1 / 1
全角文字で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 マジスー
お早い回答ありがとうございました
また質問しに来ます