ページ 11

C言語も文字判定する関数なんですが・・・

Posted: 2015年9月15日(火) 14:05
by ポッター
2箇所わからないところがあります

コード:

int IsKanji1st(int c)
{
	unsigned char uch = c;
	if (uch >= 0x81 && uch <= 0x9f || uch >= 0xe0 && uch <= 0xfc) //このreturn1 とreturn 0 これを変えすとどうなるの?
		return 1;
	else
		return 0;
}
int main(int argc, char *argv[])
{
	int n;
	while ((n = getchar()) != EOF)
	{
		if (IsKanji1st(n)){
			getchar(); //このgetcharって何しているんですか?
			continue;
		}
		else if (isalnum(n))
			putchar(n);
	}
	return 0;
}

Re: C言語も文字判定する関数なんですが・・・

Posted: 2015年9月15日(火) 16:23
by みけCAT
ポッター さんが書きました:このreturn1 とreturn 0 これを変えすとどうなるの?
「変えす」が「変える」の事だと仮定→変え方によります。
「変えす」が「返す」の事だと仮定→呼び出し側が渡した数値がShift_JISの2バイト文字の1バイト目の値として有効かどうかを知ることができます。
ポッター さんが書きました:このgetcharって何しているんですか?]
Shift_JISの2バイト文字の2バイト目と推測されるバイトを読み飛ばしています。

Re: C言語も文字判定する関数なんですが・・・

Posted: 2015年9月15日(火) 19:13
by Dixq (管理人)
main関数のwhile内のif文はIsKanji1stの返り値によって条件分岐していますが、
IsKanji1stが0を返せばelse ifの方へ、1を返せばif文の中に処理が入ります。
return 0と1を分けているのはその為です。
条件式において0は偽、0以外は真になります。