diff --git a/solver/flags.go b/solver/flags.go index e27502b..081d029 100644 --- a/solver/flags.go +++ b/solver/flags.go @@ -31,17 +31,15 @@ func (solver *Solver) parse_flags() { flag.StringVar(&row8, "row8", "000000000", "8th row of the sudoku puzzle.") flag.StringVar(&row9, "row9", "000000000", "9th row of the sudoku puzzle.") - // Print additional help data - flag.Usage = func() { - fmt.Fprintf(flag.CommandLine.Output(), "Usages of %s:\n", os.Args[0]) - fmt.Fprintf(flag.CommandLine.Output(), "\nPut every row of a Sudoku puzzle as paramters.\nUse '0' for what is currently blank in the puzzle you wish to solve.\n\n") - fmt.Fprintf(flag.CommandLine.Output(), "Example: %s -row1 ... -row2 ... -row3 ... (etc)\n\n", os.Args[0]) - flag.PrintDefaults() - } - // Parse the flags flag.Parse() + if row1 == "000000000" || row2 == "000000000" || row3 == "000000000" || row4 == "000000000" || row5 == "000000000" || row6 == "000000000" || row7 == "000000000" || row8 == "000000000" || row9 == "000000000" { + log.Printf("ERROR: All parameters must be entered.\n\n") + solver.print_Usage() + os.Exit(1) + } + // Validate the row (never trust user input) solver.validate_row("row1", row1) solver.validate_row("row2", row2) @@ -74,7 +72,8 @@ func (solver *Solver) validate_row(name string, row string) { // 1. Make sure the row is 9 in length if len(row) != 9 { - log.Printf("ERROR: Invalid length of %s; %s must be 9 numbers", name, row) + log.Printf("ERROR: Invalid length of %s (%s), must be 9 numbers\n\n", name, row) + solver.print_Usage() os.Exit(1) } @@ -84,7 +83,8 @@ func (solver *Solver) validate_row(name string, row string) { } if !found { - log.Printf("ERROR: Invalid character of %s; %s must be 9 numbers", name, row) + log.Printf("ERROR: Invalid character of %s (%s), must be 9 numbers\n\n", name, row) + solver.print_Usage() os.Exit(1) } @@ -100,7 +100,8 @@ func (solver *Solver) validate_row(name string, row string) { } if double { - log.Printf("ERROR: Double character of %s; %s numbers between 1 and 9 may only be entered once", name, row) + log.Printf("ERROR: Double character of %s (%s), numbers between 1 and 9 may only be entered once\n\n", name, row) + solver.print_Usage() os.Exit(1) } @@ -118,3 +119,10 @@ func (solver *Solver) valid_char(char rune) bool { return valid } + +func (solver *Solver) print_Usage() { + fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(flag.CommandLine.Output(), "\nPut every row of a Sudoku puzzle as paramters.\nUse '0' for what is currently blank in the puzzle you wish to solve.\n\n") + fmt.Fprintf(flag.CommandLine.Output(), "Example: %s -row1 ... -row2 ... -row3 ... (etc)\n\n", os.Args[0]) + flag.PrintDefaults() +}