- ベストアンサー
%*cの使い方
こんばんわ! 最近ネットでC言語の勉強している時、 %*c という変換文字列があり、1文字読み飛ばす時に 使うようなのですが、以下のように作ったのですが、うまく動かず今ひとつ使い方が分からずにいます どなたかご教授お願いいたします。 #include <stdio.h> int main() { char j[256]; scanf("%s", j); printf("%*c", j);//%1文字読み飛ばす return 0; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>*はこの変換文字列を用いるときも桁数になるのでしょうか?? 「この変換文字列」って"%*c"のことですか? だとしたら、答えは「はい」です。 printf("%*c\n", 8, 'a'); /* 試してみましょ */ printf("%c\n", 'a'); /* 試してみましょ(違いがわかるはず) */ >私も何故1文字飛ばせるのかさっぱりです^^; もしかして 「入力された文字を1文字読み飛ばす」 という意味ではなくて、 「printf()の引数が1つ無視される(と思ってる)」 ということかもしれません。 つまり、 printf("%c: %*c", 'a', 'b'); とすると a: b とは表示されずに a: しか表示されない(変な文字が表示されるかも)から 「上記printf()の第3引数 'b' が飛ばされた」 と勘違いしているのかな? って思ったり思わなかったり...。
その他の回答 (2)
- BlackBunny
- ベストアンサー率61% (8/13)
こんばんわ。 "%*c"で、*は文字数の指定としては使用できないようです。 で、肝心の"%*c"の意味なんですが、*のところに数字を設定すると、その数字-1桁の空白が出力され、その後に指定された変数に格納されている文字が出力されます。 ※文字と文字列の扱いに注意してね。 つまり・・・ char j[256]; scanf("%s", j); printf("%*c", j); ・・・で、変数jの先頭1文字を、頭に空白2つ付けて出力するなら、 char j[256]; scanf("%s", j); printf("%3c", j[0]); となります。
お礼
お返事有難うございます! >>※文字と文字列の扱いに注意してね。 なるほど、配列を使わないと出来ないんですね! 気をつけたいと思います^^ >>その後に指定された変数に格納されている文字が出力されます char j[256]; scanf("%s", j); printf("%3c", j[0]); 上の場合abcdを入力すれば cdが出力されるという事ですか?? 何故か aと出力されます^^;
- HOGERA3
- ベストアンサー率35% (50/139)
なんで "%*c" で1文字読み飛ばせるのかはわかりませんけど、とりあえず。 "%*" は表示する桁数を指定するときに使います。 例えばこんなかんじで。 int data = 1024; printf("%*d", 8, data); /* <-- これと */ printf("%8d", data); /* <-- これは同じ */
お礼
お返事有難うございます! *はこの変換文字列を用いるときも桁数になるのでしょうか?? 参考にしたサイトは以下です www.cis1.c.dendai.ac.jp/c_master/C_7.htm 私も何故1文字飛ばせるのかさっぱりです^^;
お礼
お返事有難うございます! >>printf("%*c\n", 8, 'a'); >>printf("%c\n", 'a'); 試させていただきました! たしかに普通は % * は指定した桁数分スペースが入り ますね! %*cはやはりサイトの勘違いなのでしょうか^^; 返って来るか分かりませんが一応HPの管理人にメールをして確認してみたいと思います。