Андрей
Андрей

Вопрос по Delphi найдите ошибку?

program Console;

{$APPTYPE CONSOLE}

uses
SysUtils;

var NewCom:integer;
NewCOMM:string;//?

begin
writeln('AGG SDK',#10,'Version Alpha',#10);
while 1>0 do

begin
readln (NewCom);
readln (NewCOMM);
case NewCOMM of //?
No :writeln ('No'); //?
Yes :writeln ('Yes'); //?
else:writeln('Noo'); //?
end; //?

case NewCom of
1:writeln ('HELP - Vivodit vse dostupnie comandi');
2:writeln ('VER - Vivodit versiy AGG SDK i datu ustanovki');
3:writeln ('EXIT - Vixodit iz consoli');
4:writeln ('COLOR - Menyaet color consoli ');
5:writeln ('CLS - Ochihaet ecran');
//Железо
6:writeln ('CPU - Vivodit infu o CPU');
7:writeln ('GPU - Vivodit infu o GPU');
8:writeln ('VGA - Vivodit infu o VGA');
9:writeln ('RAM - Vivodit infu o RAM');
10:writeln ('HARD - Vividit infu o HDD & SSD');
11:writeln ('ROM - Vivodit infu o CD, DVD, Flopy privodax');
12:writeln ('TEMP - Vivodit infu o tempirature CPU, VGA, RAM, HDD');
13:writeln ('HARDWARE - Vivodit infu o HARDWARE - anologichno Systeminfo v MS DOS');
14:writeln ('LAN - Vivodit infu o setevix ustroystvax');
15:writeln ('FAN - Vivodit infu o culerax');
//Операционная система
16:writeln ('SYSTEM - Vivodit infu o OC');
17:writeln ('REGYSTRY - Otkrivaet regedit.exe');
18:writeln ('MANAGER - Otkrivaet taskman.exe');
19:writeln ('USER - Vivodit infu o polzovatelyax');
20:writeln ('MSDOS - Otkrivaet command.com');
21:writeln ('CLS - Ochihaet ecran');
22:writeln ('OPEN - Otkrivaet ukazaniy fayl');
//Сети
23:writeln ('IP - Vivodit svoi IP adresa');
24:writeln ('PING - Pinguet ukazaniy sait ili IP adres');
25:writeln ('NETWORK - Vivodit vse setevie ustroystva i podklycheniya');
26:writeln ('CONNECT - Podclychitsya k seti ili kompu');

end;

end;

readln;
end.

Ошибка в операторе case string....C числовыми работает нормуль... А с строковоми не в какую...

Кр
Кристина

Можно примерно так сделать

uses
StrUtils;
...

const
cmdQuit = 'QUIT';
cmdLogin = 'LOGIN';
cmdPassword = 'PASSWORD';
cmdArray : Array [ 0..2 ] of String = ( cmdQuit, cmdLogin, cmdPassword );

begin
case AnsiIndexStr( 'medved', cmdArray ) of
0 : Beep;
1 : Beep;
2 : Beep;
else Beep;
end
end;

case работает только с перечислимыми типами.

А вообще, лучше сделать не

case NewCOMM of //?
No :writeln ('No'); //?
Yes :writeln ('Yes'); //?
else:writeln('Noo'); //?
end;

а

if (NewCOMM = 'No') or (NewCOMM = 'Yes') then writeln(NewCOMM) else
writeln('Noo');

АЧ
Александр Черевков

Тебе же компилятор говорит, что в данном случае можно работать только с перечислимыми типами.
В оригинале выглядит вот так:

„The compiler required an ordinal type at this point. Ordinal types are the predefined types Integer, Char, WideChar, Boolean, and declared enumerated types.“

Переделай на условие, либо бери только первую букву переменной NewCOMM (не забыв сначала проверить строку на то, что она не пустая) :

if Length(NewCOMM) > 0 then
case NewCOMM[1] of
'N' :writeln ('No');
'Y' :writeln ('Yes');
else // После else двоеточие не ставится
writeln('Noo');
end
else // Пустая строка
writeln('Noo');

Карнелия
Карнелия

ну так то разницу то найди. Зачем допустим делаешь так No :writeln ('No'); //??

ИА
Имран Ахмадов

Качай офигенную для этого среду разработки и компилятор тебе все раскажет при запуске программы

Ирина Воронова
Ирина Воронова

"не работает" или все же "не компилируется"? На будущее - если уж ищите причину ошибки, то хотя бы указывайте выдаваемое сообщение.

В данном случае, вероятно, проблема в том, что оператор CASE предполагает в качестве выражения выбора переменную порядкового типа: целое, перечисление, логические константы.
string - это не порядковый тип, поэтому конструкция синтаксически не правильная.

Похожие вопросы
Ошибка в коде delphi
Подскажите где ошибка в delphi ?
Где ошибка в коде delphi?
Где ошибка? Программа в delphi.
Вылетает ошибка delphi
Вопрос по Delphi, помогите найти ошибку в участке кода
Вопрос по Delphi, помогите найти ошибку в участке коде
Delphi - Подскажите, что за ошибка?
На что у меня вылезает ошибка в Delphi???
В чем ошибка? Delphi