Помощь новичкам


#2240

Можно код вставить в форматированном виде? Желательно, также привести полный код, чтобы можно было самому его запустить и посмотреть.


#2241

Project33.rar (10,0 КБ)


#2242

string нельзя ни явно, ни неявно преобразовать в char. Можно, например, попробовать взять первый символ строки s[1]


#2243

А, ещё можно System.Convert использовать

System.Convert.ToChar(' ').Print;

Только он выдаст исключение, если длина строки будет больше единицы.


#2244
  1. @ahtam, первый символ строки при наличии директивы {$string_nullbased+} будет 0-евым её элементом. Если же использована {$string_nullbased-}, то эффект противоположный, и индексация начинается с 1-цы. По умолчанию (без явного указания данных директив) используется индексация с 1-цы. Дополнительную информацию о директивах компилятора можно посмотреть в: Справка > Справочник по языку > Директивы компилятора.

  2. Если ничего не вводить в поле, то Ваша программа упадёт с ошибкой: Unit1.pas(30) : Ошибка времени выполнения: Индекс находился вне границ массива. Требуется проверка на выход индекса за границы строки:

procedure Form1.button1_Click(sender: Object; e: EventArgs);
begin
  var  c:=textbox1.Text;
  if c.Length < 1 then
    exit;
  
  label1.Text := c[1];
end;

, но лучше не молча обрабатывать ошибочные случаи ввода, а сообщать пользователю об этом. Ниже приведены ссылки, по которым Вы можете узнать как это делать.

Ссылки:


#2245

Очень интересная информация.


#2246

Приятно было узнать, что она оказалась интересной кому-то.


#2247

Только что понял что форум выдал мне права переноса даже админских тем в другие разделы (раньше только созданные не_админами разрешало). И вот помнится эту тему хотели перенести в раздел паскаля, но @Admin не нашёл как…

Остаётся только вопрос - стоит ли это делать? Эту тему не отображает если с сайта перейти на форум, потому что она находится в разделе разное. Но в самоволку это делать не очень хочется.


#2248

Вау… очередной админ…))))))


#2250

Думаю, надо.


#2251

Все указанные вами способ я уже до этого экспериментировал, использовал другие функции COPY, SUBSTR, … Но результата для меня то, чтобы можно было затем использовать другие функции, например ord. label1.Text := ord(c[1]) или другая форма вҷдаёт тоже самую ошибку.


#2252

Потому что типы надо преобразовывать! Copy и s.Substring возвращают строку, а не символ. А вот Convert.ToChar или обращение к символу через индексатор строки как раз вернёт char. Обратно присвоить строке символ вроде можно без преобразований, там есть неявное приведение Но если так нужно, можно использовать c.ToString.


#2253

Во первых, спасибо Всем, кто оказал помощь и написал комментарий. Во вторых, сделал его чуть по другому и получилось. Project33.rar (11,2 КБ)


#2254

Ну и зачем вы преобразовываете всё в массив, когда вам надо только взять 1 символ? Если делать так - то просто textbox1.Text[1].


#2255

Спасибо Сергей за консультации.