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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.63
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
#1

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

24.07.2010, 10:55. Просмотров 9933. Ответов 6
Метки нет (Все метки)

Есть устройство - 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 в первоначальное "девственное" состояние.
Помогите найти проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2010, 10:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очистить строку для записи нового (C++):

Очистить строку консоли - C++
Даны строчки консоли Надо последнюю строчку стереть и записать новые данные. Читал, можно через \r заполнить пробелами, но нигде не смог...

Как очистить всю строку? - C++
У меня есть строка, в этой строке я храню информацию, потом ее вывожу на экран. Как сделать так, чтобы эта строка стала пустой и можно было...

Очистить строку при каждом выполнении пункта меню - C++
Вот фрагмент из программы, подскажите кто может, как можно очистить строку b при каждом выполнении 2-го пункта меню, а то не правильно...

Написать функции для чтения/записи отдельных бит для любой записи из данного набора - C++
Начиная с адреса А в памяти МК находятся N записей длиной k бит каждая. Записи выровнены по границе слова. Написать функции для...

Очистить значение переменной для дальнейшего использования - C++
#include <iostream> #include <conio.h> using namespace std; int main() { setlocale(LC_ALL, "Rus"); int a(1); a = a +...

Ошибка при записи в строку - C++
Здравствуйте, подскажите, что я делаю не так? char *nameImage, *pathMessage, *pathImage; std::cout << "Введите название...

6
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 11:40 #2
После:
Цитата Сообщение от BrotherRabbit Посмотреть сообщение
C++
1
process(command);
попробуйте вставить:
C++
1
strcpy(command, "");
0
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
24.07.2010, 13:42  [ТС] #3
Увы, не помогает.((
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 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);
}
1
BrotherRabbit
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 6
24.07.2010, 17:03  [ТС] #5
Никакого эффекта. Причем если вывести строку на экран, - пустое место.
0
MikeSoft
Эксперт С++
3800 / 1776 / 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];
// новая попытка
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 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, проблема решена?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2010, 01:08
Привет! Вот еще темы с ответами:

Функция для создания нового файла - C++
Дан текстовый файл с неизвестным количеством вещественных чисел. Написать функцию для создания нового файла, в который нужно записать ...

Переход на новую строку при записи в файл - C++
Привет всем, я пишу такую программу.. С клавиатуры вводятся две матрицы, на выбор пользователя она записывается в файл либо в виде...

Написать функцию для создания нового файла - C++
Дан текстовый файл с неизвестным количеством вещественных чисел. Написать функцию для создания нового файла. В Файл записать числа, у...

Можно ли использовать функцию itoa без записи результата в строку? - C++
Доброго времени суток всем!:) Возник такой вот нубский вопрос, но тем не менее. Можно ли использовать функцию itoa без записи...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
25.07.2010, 01:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru