Тернарный оператор должен возвращать значение (или ссылку на переменную), которое потом можно использовать. Например, если в целочисленной переменной a записано число -3, то используя такой синтаксис: int absa = a >= 0 ? a : -a; можно присвоить переменной absa значение |-3| = 3.
Выражения break, continue (и, например, return) управляют выполнением программы, показывая, какую инструкцию выполнять следующей, и не возвращают никакого значения (даже void). Поэтому при попытке использовать такие выражения в качестве аргументов тернарного оператора, ожидающего, что оба аргумента вернут какое-то значение, возникает ошибка компиляции.
Если очень хочется использовать тернарный оператор для выхода из цикла (но зачем?) можно выбрасывать исключение, которое потом обрабатывать, например, так: try { int a = 5; while(true) { a == 0 ? throw "a equals 0" : (void) 0; a--; } } catch (char const* s) { if (s != "a equals 0") throw s; };
// PascalABC.NET // Версия 3.3.5 сборка 1662 (29.04.2018)
begin var b := ReadlnString('Введите строку -').ToLower+' '; var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray); var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true); var a := b.ToWords; var x := ReadlnChar('Буква -'); var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple; i := i.Reverse; foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0]; b := string.Join(' ', a); tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true); b.Println; Println('Количество предложений:',b.ToWords(r).Count); end.
int absa = a >= 0 ? a : -a;
можно присвоить переменной absa значение |-3| = 3.
Выражения break, continue (и, например, return) управляют выполнением программы, показывая, какую инструкцию выполнять следующей, и не возвращают никакого значения (даже void). Поэтому при попытке использовать такие выражения в качестве аргументов тернарного оператора, ожидающего, что оба аргумента вернут какое-то значение, возникает ошибка компиляции.
Если очень хочется использовать тернарный оператор для выхода из цикла (но зачем?) можно выбрасывать исключение, которое потом обрабатывать, например, так:
try {
int a = 5;
while(true) {
a == 0 ? throw "a equals 0" : (void) 0;
a--;
}
} catch (char const* s) {
if (s != "a equals 0") throw s;
};