Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2013, 12:36   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию маленькая ошибочка - при компиляции пишет "';' not allowed before 'ELSE'"

Код:
Function NumberOfWeek(N: Integer): Integer;
Const RegPath = 'Software\Sheduler';
Var reg: TRegistry;
begin
reg:= TRegistry.Create;
  Try
    if N = 0
    then
      if reg.KeyExists(RegPath)
      then Result:= reg.ReadInteger(RegPath)
      else Result:= 0;
    else //ВОТ ТУТ !!!
      if reg.KeyExists(RegPath)
      then reg.WriteInteger(RegPath,N)
      else
        begin
        reg.CreateKey(RegPath);
        reg.WriteInteger(RegPath,N);
        end;
  Finally
    reg.Free;
  end;
end;
пишет "';' not allowed before 'ELSE'", никак не врублюсь где я там не поставил точку с запятой, вроде все правильно
NewLamer&Programer вне форума Ответить с цитированием
Старый 01.10.2013, 12:38   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

воспользуйтесь переводчиком, тут совсем другой смысл
eval вне форума Ответить с цитированием
Старый 01.10.2013, 12:39   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
    if N = 0
    then
      if reg.KeyExists(RegPath)
      then Result:= reg.ReadInteger(RegPath)
      else Result:= 0;  //красное убрать
    else //ВОТ ТУТ !!!
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.10.2013, 12:43   #4
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Аватар, но тогда два ифа сольются ведь...

п.с. а может и нет хз...
NewLamer&Programer вне форума Ответить с цитированием
Старый 01.10.2013, 13:43   #5
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

что бы точно не сливались. используйте скобки в виде конструкции begin end,
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 02.10.2013, 09:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
что бы точно не сливались. используйте скобки в виде конструкции begin end,
Вот это золотые слова.
Присоединяюсь.
вместо того, чтобы надеяться на компилятор, как он разрулит ситуацию с несколькими вложенными if'ми и else, если возникают малейшие неоднозначности (вот лично для меня - неоднозначности, не для компилятора), я всегда обрамляю код в операторные скобки.
например, в вашем случае:
Код:
  reg := TRegistry.Create;
  try
    if N = 0
      then begin
      if reg.KeyExists(RegPath)
        then Result := reg.ReadInteger(RegPath)
      else Result := 0;
    end
    else begin
      if reg.KeyExists(RegPath)
        then reg.WriteInteger(RegPath, N)
      else
      begin
        reg.CreateKey(RegPath);
        reg.WriteInteger(RegPath, N);
      end;
    end;
  finally
    reg.Free;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2013, 16:16   #7
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

А ещё так можно:
Код:
function NumberOfWeek(N: Integer): Integer;
const
  RegPath = 'Software\Sheduler';
var
  reg: TRegistry;
begin
reg := TRegistry.Create;
try
  if N = 0 then
   (if reg.KeyExists(RegPath) then Result := reg.ReadInteger(RegPath)
    else Result := 0)
  else
   (if reg.KeyExists(RegPath) then reg.WriteInteger(RegPath, N)
    else begin
      reg.CreateKey(RegPath);
      reg.WriteInteger(RegPath, N);
    end);
finally
  reg.Free;
end;
end;
Kix.IV вне форума Ответить с цитированием
Старый 02.10.2013, 16:31   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Kix.IV, красиво! я про такую возможность не знал!
запомню!


NewLamer&Programer, обратите внимание, код у Вас БАЖНЫЙ!!!
если N не равно нулю, функция вернёт МУСОР (Вы ничего не возвращаете == не присваиваете переменной Result )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При делении на 0 пишет -1.#INF Tatyana64 Помощь студентам 1 04.11.2012 12:25
У меня есть программа. При компиляции пишет ошибку Incompatible type conversion. я знаю что это связано с приведением типов, leilochka777 Помощь студентам 1 06.06.2012 18:29
Ошибочка при поиске. skytechkrutoi Общие вопросы .NET 1 20.01.2011 13:01
При запуске ComboBoxEx пишет List index out of bounds -1. dx+ Общие вопросы Delphi 6 12.06.2008 22:32
прога пишет ошибку при открытии файла (почему?) nicky777 Общие вопросы Delphi 2 14.03.2008 17:56