Текстовый файл. Странная ошибка

Добрый день. Есть подобный код:
    while not eof(f) do    begin        FillChar(s, sizeof(s), 0);        readln(f, s);        if s = '' then continue;        inc(n);        .............        k := 0;        repeat            FillChar(s, sizeof(s), 0);            s := '';            readln(f, s);            if s <> '' then //// ***            begin                inc(k);                .............            end;        until s = '';    end;
Иногда, непонятно почему, условие, отмеченное ***, при пустой строке не срабатывает. С чем это связано?Добавлено через 2 минутыТ.е. выполняется if ****, и, кроме того, не выходит из repeat until.В текстовом файле есть только русские и английские буквы, цифры, пробелы, точки, запятые. Больше ничего нет.Добавлено через 4 минуты и 20 секундКроме того:
var  n, k : integer;  f : text;  s : array [0..512] of char;
Используется Emarcadero Delphi 2010
6 ответов

Может быть, там не '', а ' ', т.е. пробелы лишние?


Иногда, непонятно почему, условие, отмеченное ***, при пустой строке не срабатывает
по условию оно у тебя и не должно срабатывать при пустом значении


При пустой строке этот самый if не должен выполняться. А он выполняется.Лишних пробелов точно нет.


по условию оно у тебя и не должно срабатывать при пустом значении
я думаю автор имел ввиду, что если массив s<>'', то переход на then происходит (хотя конструкция if then else всегда работает, только бывает не так как хочет автор) (кароч фигню я написал выше . Ну вобщем даже если в массиве ни чего нет, то происходит переход на then даже по условию s<>'')а действительно при значении '' он бы вышел из цикла 
until s = '';
а что бы выходил из цикла, надо дополнить условие (s='') or (eof(f))вообще думаю там действительно пробел где-то затесалсяДобавлено @ 09:24arcsupport, покажите ваш текстовый файл, только зазипуйте его


Сделал StrPas(s) и все заработало. Странно.


что-то мне интересно стало, почему так?по идее, если сравнивать следующим образом x<>'', то аргумент справа будет иметь тип shortstring. если x:array [0..n] of char, то после 
fillchar(x,sizeOf(x),0);
он будет иметь прежнюю длину n, а каждый элемент массива будет равен #0.Опять же по идее, сравнивать напрямую массив символов и shortstring компилятор не даст. Может он перед сравнением преобразует один из аргументов к соотв. типу и производит дальнейшее сравнение?***ну вобщем без StrPas должно работать если сделать так:
 ..............            if s[0] <> #0 then //// ***            begin                inc(k);                .............            end;        until s[0] = #0;