Fixed standard input error handling
This commit is contained in:
parent
18b1117749
commit
2dbd22114b
3 changed files with 25 additions and 12 deletions
|
@ -177,9 +177,17 @@ func (p *Pointer) eval(c int, f *field.Field) (done bool, returnValue *int) {
|
|||
case ',':
|
||||
p.CharacterOutput(p.ss.head.Pop())
|
||||
case '&':
|
||||
p.ss.head.Push(p.DecimalInput())
|
||||
if v, err := p.DecimalInput(); err != nil {
|
||||
p.Reverse()
|
||||
} else {
|
||||
p.ss.head.Push(v)
|
||||
}
|
||||
case '~':
|
||||
p.ss.head.Push(p.CharacterInput())
|
||||
if v, err := p.CharacterInput(); err != nil {
|
||||
p.Reverse()
|
||||
} else {
|
||||
p.ss.head.Push(v)
|
||||
}
|
||||
case 'y':
|
||||
n := p.ss.head.Pop()
|
||||
now := time.Now()
|
||||
|
|
|
@ -2,37 +2,42 @@ package pointer
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
var defaultInputLastChar *int = nil
|
||||
|
||||
func DefaultCharacterInput() int {
|
||||
func DefaultCharacterInput() (int, error) {
|
||||
if defaultInputLastChar != nil {
|
||||
c := *defaultInputLastChar
|
||||
defaultInputLastChar = nil
|
||||
return c
|
||||
return c, nil
|
||||
}
|
||||
b := make([]byte, 1)
|
||||
i, err := os.Stdin.Read(b)
|
||||
if err != nil {
|
||||
log.Fatalf("Error in DefaultCharacterInput { b: %c, i: %d, err: %+v }", b[0], i, err)
|
||||
return 0, fmt.Errorf("Error in DefaultCharacterInput { b: %c, i: %d, err: %w }", b[0], i, err)
|
||||
}
|
||||
return int(b[0])
|
||||
return int(b[0]), nil
|
||||
}
|
||||
|
||||
func DefaultDecimalInput() int {
|
||||
func DefaultDecimalInput() (int, error) {
|
||||
var v int
|
||||
for {
|
||||
c := DefaultCharacterInput()
|
||||
c, err := DefaultCharacterInput()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if c >= '0' && c <= '9' {
|
||||
v = c - '0'
|
||||
break
|
||||
}
|
||||
}
|
||||
for {
|
||||
c := DefaultCharacterInput()
|
||||
c, err := DefaultCharacterInput()
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
if c >= '0' && c <= '9' {
|
||||
v = v*10 + c - '0'
|
||||
} else {
|
||||
|
@ -40,7 +45,7 @@ func DefaultDecimalInput() int {
|
|||
break
|
||||
}
|
||||
}
|
||||
return v
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func DefaultCharacterOutput(c int) {
|
||||
|
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
var myRand = rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
|
||||
type InputFunction func() int
|
||||
type InputFunction func() (int, error)
|
||||
type OutputFunction func(v int)
|
||||
|
||||
type Pointer struct {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue