powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите чайнику :)
4 сообщений из 4, страница 1 из 1
Помогите чайнику :)
    #33063177
diashi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ту такая ситуация. Пишу на Делфи, да вот знакомая попросила помочь ей с курсовой на С ... сделал я на С++ Билдер (впервые в жизни с ним работаю), так им надо на С ... ну хотя бы консольный вариант на С++ билдер.
Вот у мене вопрос.
Обьявил я переменный глобально (для всех функций):
Код: plaintext
1.
2.
3.
4.
5.
const char cmdExit[ 10 ] = "Exit";
const char cmdAdd[ 10 ] = "Add";
const char cmdDelete[ 10 ] = "Delete";
const char cmdChngPar[ 10 ] = "ChngPar";
const char cmdView[ 10 ] = "View";
const char cmdUndoFile[ 10 ] = "UndoFile";
int N;
double x, y, a, b;
char command[10];

Потом в одной из функций получаю команду (Тип строка), и потом мне надо ее сравнить.
Сравниваю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void checkcmd()
{
switch (command[ 10 ])
  {
    case cmdExit :abort(); break;
    default :wrongcmd();
  }
}
Но вот у меня ругается при компиляции на этой строке case cmdExit :abort(); break; . Почему ? Мне всего-то надо проверить команду введенную с клавиатуры и в зависимости от нее выполнить определенную функцию.
И еще ... может есть дока для работы с файлами ? (чтение-запись, создание, удаление).
И был бы очень благодарен за ссылку на нормальную книгу для начинающих - чтоб все было понятно.
И так же интересуют функции поиска строки в подстроке и работа со строками (на сколько я понял тип char идет как масив байт ... а мне бы таки строка нужна была. Есть ли такое ? И есть ли вообще динамические строки на С ?)
Заранее спасибо.
...
Рейтинг: 0 / 0
Помогите чайнику :)
    #33063201
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
switch ( expression )
    case constant-expression : statement
    [default  : statement]
В Вильдере тоже справка есть
...
Рейтинг: 0 / 0
Помогите чайнику :)
    #33063215
diashi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser
Код: plaintext
1.
2.
switch ( expression )
    case constant-expression : statement
    [default  : statement]
В Вильдере тоже справка есть
А у меня не так что-ли ? Если написать так, то работает без ошибки компиляции:
Код: plaintext
1.
2.
3.
4.
switch (command[ 10 ])
  {
    case 'fff':abort(); break;
    default :wrongcmd();
  }
Почему ? и ненадо смеяться :) Я же только взял читать ! Говорю же что в оконном режиме у меня работает программа. А тут надо без лишних библиотек ...
Ну так будем смеятся или кто-то реально даст ссылку или скажет что не так ?
...
Рейтинг: 0 / 0
Помогите чайнику :)
    #33063386
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diashi
char command[10];

switch (command[10])
{
case cmdExit :abort(); break;

С не работает со стороками. Вообще. Для С есть только массивы отдельных char. Два массива сравнивать нельзя.
switch(command[10]) в данном случае, делает выборку по одинадцатому char из массивам command.

"case cmdExit" в свою очередь можно прочитать "если переданный указатель совпадает с адресом первого байта массива cmdExit".

Вообще, такие задачки обычно решаются так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
const char commands[ 5 ][ 10 ] = { "Exit", "Add", "Delete", "View", "Undo" };

for(i= 0 ; i< 5 ; i++) {
  if (strcmp(EnteredString, commands[i])== 0 ) {
    switch(i) {
    case  0 : // Exit
             break;
    case  1 : // Add
             break;
     // и так далее
  }
}
Чтобы не работать с цифровыми константами, можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
const char commands[ 5 ][ 10 ] = { "Exit", "Add", "Delete", "View", "Undo" };
#define cmdExit  0 
#define cmdAdd  1 

for(i= 0 ; i< 5 ; i++) {
  if (strcmp(EnteredString, commands[i])== 0 ) {
    switch(i) {
    case cmdExit: // Exit
             break;


diashi
И так же интересуют функции поиска строки в подстроке и работа со строками (на сколько я понял тип char идет как масив байт ... а мне бы таки строка нужна была. Есть ли такое ? И есть ли вообще динамические строки на С ?)
Заранее спасибо.
Динамических строк нету в приниципе.
Есть набор str* функций работающих с ASCIIz строками: strlen, strcmp, strcpy, strcat и так далее. Бери справочник и смотри.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите чайнику :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]