質問: 下のプログラムは文字列や数値をカンマやスペースで区切って入力し、それを出力するプログラムなのですが、10行目の「%*c」がどういう意味か分かりません。%cは1文字として出力するもので、*(アスタリスク)は掛け算の意味ですが、「%*c」のような使い方はしないと思います。 試しに、10行目のscanf内の"%*c%c,%c"を、%*cを消して"%c,%c"のみにして実行したら、実行結果に変な数値が出力されたので、%*cに何らかの役割があることはわかります。しかし検索してもわかりません。%*cとは何でしょうか? ↓ プログラム ``` #include int main(void) { int x,y,u,v; char c1,c2,c4,c5,c6; printf("0≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>>\n"); scanf("%d,%d",&x,&y); printf("英大文字c1と英小文字c2をカンマで区切って入力>>>\n"); scanf("%*c%c,%c",&c1,&c2); printf("x=%d\t",x); printf("y=%d\t",y); printf("c1=%c\t",c1); printf("c2=%c\n\n",c2); if(x>=0 && x<=100) printf("xは0以上100以下の整数\t"); if(y<=0 || y>100) printf("yは0以下または100以上の整数\n"); if(c1>='A' && c1<='Z') printf("入力文字c1は英大文字\t"); if(c2>='a' && c2<='z') printf("入力文字c2は英小文字\n\n"); printf("数値2つ(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>>\n"); scanf("%d %d %c %c %c",&u,&v,&c4,&c5,&c6); printf("u=%d\t",u); printf("v=%d\t",v); printf("c4=%c\t",c4); printf("c5=%c\t",c5); printf("c6=%c\n",c6); } ``` ↓ 上のプログラムの実行結果 ``` 0≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>> 80,500 英大文字c1と英小文字c2をカンマで区切って入力>>> R,i x=80 y=500 c1=R c2=i xは0以上100以下の整数 yは0以下または100以上の整数 入力文字c1は英大文字 入力文字c2は英小文字 数値2つ(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>> u=1 v=2 c4=a c5=b c6=c ``` ↓ 10行目のscanf内の"%*c%c,%c"を"%c,%c"のみにしたときの実行結果 ``` 0≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>> 80,500 英大文字c1と英小文字c2をカンマで区切って入力>>> R,i x=80 y=500 c1= c2=@ xは0以上100以下の整数 yは0以下または100以上の整数 数値2つ(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>> u=0 v=4201216 c4=. c5=[ c6= ```
回答: > > *(アスタリスク)は掛け算の意味ですが > > > `scanf`の書式文字列の中の`*`は掛け算ではなく、「その値は読み取るけど、どこにも代入せずに捨てる」という意味になります(man)。つまり、`%*c`全体では、「1文字読み飛ばす」という意味です。