Top.Mail.Ru
Ответы

Помогите с синтаксисом в Go

Вот сам код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
 func Calc(expression string) (float64, error) { 
  result := 0 
  num := make([]int, 0, 20)  
  deist := make([]string, 0, 19) 
  expression = strings.ReplaceAll(expression, " ", "") 
  for _, r := range expression { 
    if !strings.ContainsRune("0123456789+-*/()", r) { 
      return 0, errors.New("Неверно набран пример") 
        } 
  } 
  for i:=0; i<20, i++ { 
    if num[i]==0{ 
      num[i], expression = Number(expression) 
    } 
    deist[i] = expression[0] 
    expression = append(str[:0], str[1:]...) 
    if expression[i]=="("{ 
      expression = append(str[:0], str[1:]...) 
      in := "" 
      for _, p := range expression { 
        if p==")" { 
          break 
        } else { 
          in = in + p 
        } 
      } 
      num[i+1]=Calc(in) 
    } 
  } 
  for i:=0; i<len(deist); i++ { 
    if deist[i]=="/" { 
      if num[i+1]==0 { 
        err := errors.New("На ноль делить нельзя!") 
        return 0, err 
      } 
      deist = append(str[:i], str[i+1:]...) 
      num[i]=num[i] / num[i+1] 
      num = append(str[:i+1], str[i+2:]...) 
    } else if deist[i]=="*" { 
        deist = append(str[:i], str[i+1:]...) 
        num[i]=num[i] * num[i+1] 
        num = append(str[:i+1], str[i+2:]...) 
    } 
  for i:=0; i<len(deist); i++ { 
    if deist[i]=="-" { 
        deist = append(str[:i], str[i+1:]...) 
        num[i]=num[i] - num[i+1] 
        num = append(str[:i+1], str[i+2:]...) 
    } else if deist[i]=="+" { 
        deist = append(str[:i], str[i+1:]...) 
        num[i]=num[i] + num[i+1] 
        num = append(str[:i+1], str[i+2:]...) 
    } 
  } 
  result = num[0] 
  return result, nil 
} 
 
func Number (str string) (int, string) { 
    chislo := 0 
    chisl := 0 
    for i:=0; i==1 { 
      if str[i] == "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" { 
        chisl = int(str[i]) 
        chislo = chislo * 10 + chisl 
          str = append(str[:i], str[i+1:]...) 
      } else { 
          break 
      } 
  } 
  return chislo 
} 

Вот текст ошибок:

1234567
 ./HelloWorld.go:20:20: syntax error: unexpected ++, expecting := or = or comma 
./HelloWorld.go:21:5: syntax error: unexpected if, expecting semicolon or newline 
./HelloWorld.go:39:3: syntax error: non-declaration statement outside function body 
./HelloWorld.go:71:20: syntax error: unexpected {, expecting semicolon or newline 
./HelloWorld.go:72:7: syntax error: unexpected if, expecting expression 
./HelloWorld.go:76:9: syntax error: unexpected else at end of statement 
./HelloWorld.go:79:3: syntax error: non-declaration statement outside function body 

Сам код желательно менять по минимуму. Заранее спасибо

По дате
По рейтингу
Аватар пользователя
Новичок
8мес

for i:=0; i<20, i++ { - опять запятая вместо точки с запятой.

for i:=0; i<len(deist); i++ { - вероятно, потерял закрывающую фигурную скобку

for i:=0; i==1 { - отсутствует вторая точка с запятой, к тому же этот цикл ни разу не выполнится.

str[i] == "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" - полностью ошибочная конструкция. Если ты хочешь проверить, что символ является цифрой, это делается так:

1
 str[i] >= '0' && str[i] <= '9' 


У тебя во множестве мест перепутаны одиночные и двойные кавычки. Конструкция deist[i]=="-" пытается сравнить символ deist[i] со строкой "-", что вызывает ошибку компиляции. И таких ошибок в коде не меньше пяти. Символ - одиночные кавычки: deist[i]=='-'. А двойные кавычки - строка и только строка.