// in the input.
                        inputc := s.getRune()
                        if inputc == eof {
-                               if wasNewline {
-                                       // Newlines are mandatory.
-                                       return -1
-                               }
                                return
                        }
                        if !isSpace(inputc) {
        end := len(format) - 1
        // We process one item per non-trivial format
        for i := 0; i <= end; {
-               switch w := s.advance(format[i:]); {
-               case w > 0:
+               w := s.advance(format[i:])
+               if w > 0 {
                        i += w
                        continue
-               case w < 0:
-                       // Can't advance format. Why not?
-                       s.errorString("input does not match format")
                }
-
-               // Either we have a percent character, or we ran out of input.
-
+               // Either we failed to advance, we have a percent character, or we ran out of input.
                if format[i] != '%' {
+                       // Can't advance format.  Why not?
+                       if w < 0 {
+                               s.errorString("input does not match format")
+                       }
                        // Otherwise at EOF; "too many operands" error handled below
                        break
                }
 
                count  int
                ok     bool
        }{
-               {"newline in both", "1\n2", "%d\n%d", 2, true},
+               {"newline in both", "1\n2", "%d\n%d\n", 2, true},
                {"newline in input", "1\n2", "%d %d", 1, false},
-               {"extra newline in format", "1\n2", "%d\n%d\n", 2, false},
-               {"newline-newline in both", "1\n\n2", "%d\n\n%d", 2, true},
-               {"newline-newline in format", "1\n2", "%d\n\n%d", 1, false},
-               {"newline-newline in input", "1\n\n2", "%d\n%d", 1, false},
                {"space-newline in input", "1 \n2", "%d %d", 1, false},
                {"newline in format", "1 2", "%d\n%d", 1, false},
                {"space-newline in format", "1 2", "%d \n%d", 1, false},
                {"space-newline in both", "1 \n2", "%d \n%d", 2, true},
                {"extra space in format", "1\n2", "%d\n %d", 2, true},
                {"two extra spaces in format", "1\n2", "%d \n %d", 2, true},
-               {"newline start in both", "\n1 2", "\n%d %d", 2, true},
-               {"newline start in format", "1 2", "\n%d %d", 0, false},
-               {"newline start in input", "\n1 2", "%d %d", 0, false},
-               {"space-newline start in input", " \n1 2", "\n%d %d", 2, true},
        }
        for _, test := range tests {
                n, err := Sscanf(test.text, test.format, &a, &b)