質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

2518閲覧

%*cの意味が分からない

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2019/05/17 01:25

編集2019/05/17 01:27

下のプログラムは文字列や数値をカンマやスペースで区切って入力し、それを出力するプログラムなのですが、10行目の「%c」がどういう意味か分かりません。%cは1文字として出力するもので、(アスタリスク)は掛け算の意味ですが、「%*c」のような使い方はしないと思います。
試しに、10行目のscanf内の"%*c%c,%c"を、%*cを消して"%c,%c"のみにして実行したら、実行結果に変な数値が出力されたので、%*cに何らかの役割があることはわかります。しかし検索してもわかりません。%*cとは何でしょうか?

↓ プログラム

C

1#include <stdio.h> 2int main(void) 3{ 4 int x,y,u,v; 5 char c1,c2,c4,c5,c6; 6 7 printf("0≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>>\n"); 8 scanf("%d,%d",&x,&y); 9 printf("英大文字c1と英小文字c2をカンマで区切って入力>>>\n"); 10 scanf("%*c%c,%c",&c1,&c2); 11 printf("x=%d\t",x); 12 printf("y=%d\t",y); 13 printf("c1=%c\t",c1); 14 printf("c2=%c\n\n",c2); 15 16 if(x>=0 && x<=100) printf("xは0以上100以下の整数\t"); 17 if(y<=0 || y>100) printf("yは0以下または100以上の整数\n"); 18 if(c1>='A' && c1<='Z') printf("入力文字c1は英大文字\t"); 19 if(c2>='a' && c2<='z') printf("入力文字c2は英小文字\n\n"); 20 21 printf("数値2つ(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>>\n"); 22 scanf("%d %d %c %c %c",&u,&v,&c4,&c5,&c6); 23 printf("u=%d\t",u); 24 printf("v=%d\t",v); 25 printf("c4=%c\t",c4); 26 printf("c5=%c\t",c5); 27 printf("c6=%c\n",c6); 28} 29

↓ 上のプログラムの実行結果

C

10≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>> 280,500 3英大文字c1と英小文字c2をカンマで区切って入力>>> 4R,i 5x=80 y=500 c1=R c2=i 6 7xは0以上100以下の整数 yは0以下または100以上の整数 8入力文字c1は英大文字 入力文字c2は英小文字 9 10数値2(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>> 11u=1 v=2 c4=a c5=b c6=c 12

↓ 10行目のscanf内の"%*c%c,%c"を"%c,%c"のみにしたときの実行結果

C

10≦x≦100のxと、y≦0 or y≧100のyをカンマで区切って入力>>> 280,500 3英大文字c1と英小文字c2をカンマで区切って入力>>> 4R,i 5x=80 y=500 c1= 6 c2=@ 7 8xは0以上100以下の整数 yは0以下または100以上の整数 9数値2(u,v)と文字3文字(c4,c5,c6)をスペースで区切って入力>>> 10u=0 v=4201216 c4=. c5=[ c6= 11
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

*(アスタリスク)は掛け算の意味ですが

scanfの書式文字列の中の*は掛け算ではなく、「その値は読み取るけど、どこにも代入せずに捨てる」という意味になります(man)。つまり、%*c全体では、「1文字読み飛ばす」という意味です。

投稿2019/05/17 01:29

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/17 01:37

ご回答ありがとうございます。解決できました!
yumetodo

2019/05/17 02:49

解決済みにしてください
退会済みユーザー

退会済みユーザー

2019/05/17 22:59

すいません解決済みにするのを忘れていました。解決済にしておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問