こちらのサイトにある以下のプログラムについて質問です。
http://karetta.jp/book-node/game-programming/235062
(一部抜粋です。お手数ではございますが、上記のサイトも併せてご参考ください)
-------------------------
//指定した位置からlen文字分表示する
for( i = 0; i < len && message[ start + i ] != '\0'; i += 2 ) {
printf("%c", message[ start + i ] ); //(1)
printf("%c", message[ start + i + 1 ]); //(2)
}
printf("\n");
}
---------------------------
なぜ(1)(2)のようにprintf関数を2行準備しないとうまく作動しないのかわかりません(もちろん「日本語はchar 2文字で表現している」という説明に対応しているのだと思いますが)。
もう少しそのあたりを詳しく説明してくださる方がいらっしゃいますと大変助かります。
何とぞよろしくお願いいたします。
(すべてのプログラムを転載するのはいろいろ問題がある気がしたので、一部抜粋にいたしました)
プログラムについて質問です。
Re:プログラムについて質問です。
>なぜ(1)(2)のように printf関数を2行準備しないとうまく作動しないのかわかりません
こう書かれているということは、printfを1つにまとめて
うまくいかなかったのですね。
もし、1つにまとめてうまくいったとすれば、その質問が出てくることが
おかしいですから。
そこで、1つにまとめてうまくいかなかったときのソースコードを見せてください。
こう書かれているということは、printfを1つにまとめて
うまくいかなかったのですね。
もし、1つにまとめてうまくいったとすれば、その質問が出てくることが
おかしいですから。
そこで、1つにまとめてうまくいかなかったときのソースコードを見せてください。
Re:プログラムについて質問です。
簡単に言うと、文字は種類ごとに番号付けされています。(文字コードとか言いますよね)
たとえばaは61番です。Mは4d番です。(ただし16進数)
このように半角の文字は2ケタで書けます。
しかし、この世に文字は無数にあるので、2ケタまでしかない番号では扱いきれません。
そこで、全角文字は 2ケタ+2ケタ で表すことになっています。
たとえば「あ」は 82,a0 番です。「院」は89,40 番です。
しろさんの書かれたURLのリンク先での主題は、日本語の表示の仕方とのことですので、
全角文字を扱います。
ちなみに上記の「文字の番号」は覚える必要はありません。
http://charset.7jp.net/sjis.html

たとえばaは61番です。Mは4d番です。(ただし16進数)
このように半角の文字は2ケタで書けます。
しかし、この世に文字は無数にあるので、2ケタまでしかない番号では扱いきれません。
そこで、全角文字は 2ケタ+2ケタ で表すことになっています。
たとえば「あ」は 82,a0 番です。「院」は89,40 番です。
しろさんの書かれたURLのリンク先での主題は、日本語の表示の仕方とのことですので、
全角文字を扱います。
message[0] に89が入っていて、 message[1] に40が入っていたとします。そこで printf("%c", message[0]); printf("%c", message[1]);と書けば、89 40 という文字番号に相当する文字「院」が描画されます。
ちなみに上記の「文字の番号」は覚える必要はありません。
http://charset.7jp.net/sjis.html

Re:プログラムについて質問です。
>BOXさん
>HKさん
ご説明ありがとうございます。ただおっしゃることは理解できるのですが
for( i = 0; i < len && message[ start + i ] != '\0'; i++ ) {
printf("%c", message[ start + i ] );
}
ではだめなのでしょうか。(i+=2をi++、中身を一行にしました)
これでも同じものが表示されるような気がするのですが・・・・・・
>HKさん
ご説明ありがとうございます。ただおっしゃることは理解できるのですが
for( i = 0; i < len && message[ start + i ] != '\0'; i++ ) {
printf("%c", message[ start + i ] );
}
ではだめなのでしょうか。(i+=2をi++、中身を一行にしました)
これでも同じものが表示されるような気がするのですが・・・・・・
Re:プログラムについて質問です。
messageが2バイト文字であれば結果は同じですね
printfを1行にしても1文字表示するのに2回のループが必要なだけで問題ありません
2行のほうは1回のループで1文字を表示したいというプログラマーの意図が読み取れます
printfを1行にしても1文字表示するのに2回のループが必要なだけで問題ありません
2行のほうは1回のループで1文字を表示したいというプログラマーの意図が読み取れます
Re:プログラムについて質問です。
>toyoさん
なるほど。一行でも問題ないのですね。
2行で書かなければいけない理由があるのではないか? と疑っていました。
皆様ありがとうございました。
なるほど。一行でも問題ないのですね。
2行で書かなければいけない理由があるのではないか? と疑っていました。
皆様ありがとうございました。