回答編集履歴

1

加筆

2020/12/31 09:25

投稿

episteme
episteme

スコア16612

test CHANGED
@@ -49,3 +49,15 @@
49
49
  }
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+ [公式リファレンス](https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/format-specification-fields-scanf-and-wscanf-functions?view=msvc-160)曰く:
56
+
57
+
58
+
59
+ > 書式は左から右へ読み取られます。 **書式指定以外の文字は、入力ストリーム内の一連の文字列に一致するものと想定されます**。これらの文字は入力ストリーム内でスキャンされますが格納はされません。 **入力ストリーム内の文字が書式指定に合わないと、scanf 関数は終了し、その文字は読み取られなかったものとして入力ストリームに残ります**。
60
+
61
+
62
+
63
+ つまり書式中に '/' を書いてないのでデータ中の '/'は読み飛ばされずに %d すなわち int に変換しようとする。ところが '/'はintに変換できずに scanfはそこで失敗とする。2つめ以降が読み取れない理由はコレ。