• ベストアンサー

%*cの使い方

こんばんわ! 最近ネットでC言語の勉強している時、 %*c という変換文字列があり、1文字読み飛ばす時に 使うようなのですが、以下のように作ったのですが、うまく動かず今ひとつ使い方が分からずにいます どなたかご教授お願いいたします。 #include <stdio.h> int main() { char j[256]; scanf("%s", j); printf("%*c", j);//%1文字読み飛ばす return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.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' が飛ばされた」 と勘違いしているのかな? って思ったり思わなかったり...。

kogara
質問者

お礼

お返事有難うございます! >>printf("%*c\n", 8, 'a'); >>printf("%c\n", 'a'); 試させていただきました! たしかに普通は % * は指定した桁数分スペースが入り ますね! %*cはやはりサイトの勘違いなのでしょうか^^; 返って来るか分かりませんが一応HPの管理人にメールをして確認してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

こんばんわ。 "%*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]); となります。

kogara
質問者

お礼

お返事有難うございます! >>※文字と文字列の扱いに注意してね。 なるほど、配列を使わないと出来ないんですね! 気をつけたいと思います^^ >>その後に指定された変数に格納されている文字が出力されます char j[256]; scanf("%s", j); printf("%3c", j[0]); 上の場合abcdを入力すれば cdが出力されるという事ですか?? 何故か aと出力されます^^;

全文を見る
すると、全ての回答が全文表示されます。
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.1

なんで "%*c" で1文字読み飛ばせるのかはわかりませんけど、とりあえず。 "%*" は表示する桁数を指定するときに使います。 例えばこんなかんじで。 int data = 1024; printf("%*d", 8, data); /* <-- これと */ printf("%8d", data); /* <-- これは同じ */

kogara
質問者

お礼

お返事有難うございます! *はこの変換文字列を用いるときも桁数になるのでしょうか?? 参考にしたサイトは以下です www.cis1.c.dendai.ac.jp/c_master/C_7.htm 私も何故1文字飛ばせるのかさっぱりです^^;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • c言語のポインタへの文字列入力についてです。

    当方c言語初学者なのですがscanfを使ってポインタに文字列を入力したいのですがバグが発生して進みません・・・どういうことなのでしょうか? #include <stdio.h> int main(void) { char *a; scanf("%s", a); printf("%s", a); return (0); } *aをa[128]; のように配列に変えるとうまくいくことはなんとかわかるのですが・・・助けてください(^_^;)

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • C言語の初心者です。これを実行してみてください。

    「a」って打ち込んだら「a」ってでましたか? #include<stdio.h> int main(void){ char a; printf("aaa\n"); scanf_s("%c", &a); printf("%c", a); return 0; }

  • C言語の問題が解けません!

    僕は、C言語を勉強しているのですがこの問題の答えがわかりません。 どうか教えてください。 回答お願いします。 ・問題・ 10文字以内の2つの英単語を入力し、アルファベット順で最初にくる単語を表示するプログラムを作りなさい。 /プログラム/ #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); printf("文字列2は?"); return 0; }

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • C言語の無効な値が入力されたときの繰り返しについて

    C言語で最初に入力した整数の5倍になるまで何度も入力を促すプログラムでわからないところがあるのですが #include  "stdio.h" int main() { int a ; do { printf("input a:"); scanf("%d",&a); } while( )     ← printf( ) ←この二つの()内の文字をどうすればよいのか分かりません return 0; } 教えていただけないでしょうか

  • ASCIIコード入力

    プログラムを作っていてどうしてもわからなくなりまして… #include <stdio.h> int main(void) { char c; c=38; printf("%c\n",c); return 0; } この場合は&が出てくるからいいんですけど… #include <stdio.h> int main(void) { char c; scanf("%c",&c); printf("%c\n",c); return 0; } この場合は97をscanすると9が出てきます。ASCIIコード入力でaを表示させたいんですが、何が間違っているのでしょうか? 初心者なもので…お願いしますm(__)m

  • ポインタについて

    #include<stdio.h> int main(void) { char str[10]; char *ptr = str; printf("文字列を入力してください。\n"); scanf("%s",ptr); printf("文字列は%sです。",str); return 0; } 上記のプログラムのscanf("%s",ptr);の ptrに&をつけるとなぜ先頭の4文字は入力しても 表示されなくなってしまうのでしょうか? よろしくお願いします。