Форум программистов, компьютерный форум CyberForum.ru

Очистить строку для записи нового - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.63
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
24.07.2010, 10:55     Очистить строку для записи нового #1
Есть устройство - x86 машинка, там стоит DOS. С компьютером оператора общается через COM порт.
С putty или гипертерминала вводится команда, которая интерпретируется программой и выдается некий ответ.
Пишу на borland C++ 3.0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int j=0;
char command[16];
char ch;
...
инициализация порта
...
do { c = inportb(PORT1 + 5);        проверяет поступление байта по флагу
      if (c & 1)
     {
        ch = inportb(PORT1);
        if (ch==13)
        {
           j=0;
           process(command);
        }
        command[j]=ch;
        j++;
     }
    } while (ch !=27);
}
 
void process(char command[])
{
   if (!strcmp(command,"VOLT1"))
     func_volt1();
   else if (!strcmp(command,"VOLT2"))
     func_volt2();
   else if (!strcmp(command,"TEMP"))
     func_temp();
   else {
     reply(error_msg);
     }
 
  //   strcpy(command,"");
  // delete command;
  // command = new char[16];
  //   memset (command, 0, 16);
  //   printf("%s\n",command);
 
}
Пробовал все варианты, что закомменчены внизу, - сначала программа работает правильно, но уже после первого прохода не воспринимает верно введенную команду и выдает "error_msg".
Я думаю, проблема в том, что не удается вернуть массив command в первоначальное "девственное" состояние.
Помогите найти проблему.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 11:40     Очистить строку для записи нового #2
После:
Цитата Сообщение от BrotherRabbit Посмотреть сообщение
C++
1
process(command);
попробуйте вставить:
C++
1
strcpy(command, "");
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
24.07.2010, 13:42  [ТС]     Очистить строку для записи нового #3
Увы, не помогает.((
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 15:45     Очистить строку для записи нового #4
Так попробуйте:
C++
1
2
3
4
5
6
if (ch==13)
{
  command[j] = '\0';
  j=0;
  process(command);
}
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
24.07.2010, 17:03  [ТС]     Очистить строку для записи нового #5
Никакого эффекта. Причем если вывести строку на экран, - пустое место.
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
24.07.2010, 17:20     Очистить строку для записи нового #6
BrotherRabbit, у вас ошибка в закомментированной попытке:
C++
1
delete command;
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
char *command = new char[16];
strcpy(command,"text");
// выполнили первое действие
memset(command, NULL, 16);
delete []command;
command = NULL;
// удалили
command = new char[16];
// новая попытка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2010, 01:08     Очистить строку для записи нового
Еще ссылки по теме:

Работа с файлами. Как добавить переход на новую строку при записи? C++
очистить значение переменной для дальнейшего использования C++
C++ Написать функцию для создания нового файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 01:08     Очистить строку для записи нового #7
BrotherRabbit, попробуйте изменить цикл следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
do { 
  c = inportb(PORT1 + 5);
  if (c & 1)
  {
    ch = inportb(PORT1);
    if (ch == 13)
    {
      command[j] = '\0';
      process(command);
      j = 0;
    }
    else
    {
      command[j] = ch;
      j++;
    }
} while (ch != 27);
Должно помочь.
В process ничего не делайте, только выводите на экран. Должно быть все нормально.
Если что-то не так - запостите вывод сюда.

Добавлено через 7 часов 44 минуты
BrotherRabbit, проблема решена?
Yandex
Объявления
25.07.2010, 01:08     Очистить строку для записи нового
Ответ Создать тему
Опции темы

Текущее время: 12:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru