teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/12/23 00:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,2 +1,29 @@
1
1
  "%s" の代わりに、"%*s" と書くか、" 緯度:" と書くか、" %*[^ ]" と書くか。
2
- ドキュメントを見て、いろいろ試してみてください。
2
+ ドキュメントを見て、いろいろ試してみてください。
3
+
4
+ **追記**
5
+ scanf(書式、引数...) において、引数は格納先へのポインタです。
6
+
7
+ 書式は、複数の指令を並べたものです。
8
+
9
+ 指令には、次の 3種類があります。
10
+ ・空白類文字 (isspace関数で規定される文字 ' ', '\t', '\n', '\v', '\f', '\r')
11
+ ・通常の文字
12
+ ・%で始まる変換指定
13
+
14
+ 指令の空白類文字は、入力の 0個以上の空白類文字を読み飛ばします。
15
+
16
+ 指令の通常文字は、それと一致する入力文字を読み飛ばします。
17
+
18
+ 変換指定は、%d, %s, %c などですが、%c と %[ と %n 以外は、
19
+ 入力の空白類文字を読み飛ばした後、指定した変換処理を行います。
20
+
21
+ scanf("A=%d", &n); なら、"A"、"="、"%d" の 3つの指令があり、
22
+ 入力の "A=45" や "A= 45" で、n に 45 を読み込めますが、
23
+ 入力の "45" や "A = 45" では、n に 45 を読み込めません。
24
+
25
+ %d は数字の列を読み込んで数値に変換しますが、
26
+ 数字の列の終わりを知るために、1つ余分に文字を読み込みます。
27
+ しかし、その文字は入力バッファに押し戻されて、次の入力に使用されます。
28
+
29
+ 以上の scanf の基本的な機能を理解できましたか?

1

訂正

2021/12/23 00:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,2 +1,2 @@
1
- "%s" の代わりに、"%*s" と書くか、" 緯度:" と書くか、" %[^ ]" と書くか。
1
+ "%s" の代わりに、"%*s" と書くか、" 緯度:" と書くか、" %*[^ ]" と書くか。
2
2
  ドキュメントを見て、いろいろ試してみてください。