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

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

Войти
Регистрация
Восстановить пароль
 
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
#1

Заменить строки массивом массивов чаров - C++

12.12.2012, 17:33. Просмотров 607. Ответов 6
Метки нет (Все метки)

Подразумевается создание массива строк, а точнее - массива массивов чаров, чтобы сделать код расширяемым в будущем. Смысл кода в том, что робот управляется путём создания в определённом каталоге файлов, имена которых являются командами. Робот файл удаляет, команду выполняет и всё повторяется сначала. Что ещё посоветуете?

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
const char* goAhead = "C:\\my_robot\\GOAHEAD";
const char* turnLeft = "C:\\my_robot\\TURNLEFT";
const char* turnRight = "C:\\my_robot\\TURNRGHT";
 
bool FileExists(const char* fname) {
    return ::GetFileAttributesA(fname) != DWORD(-1);
}
 
bool DelFile(const char* fname) {
    if( FileExists(fname) ){
        while( ::DeleteFileA(fname) == 0 )  Sleep(100);
        return true;
    }
    return false;
}
 
int GetOrder() {
    if ( FileExists(goAhead) )  return 1;
    if ( FileExists(turnLeft) )  return 2;
    if ( FileExists(turnRight) )  return 3;
    return 0;
}
 
bool DelOrder() {
    return ( DelFile(goAhead) || DelFile(turnLeft) || DelFile(turnRight) );
}
 
int WaitOrder() {
    int Order;
    do {
        Sleep(100);
        Order = GetOrder();
    } while ( Order == 0 );
    if ( DelOrder() )   return Order;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2012, 17:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить строки массивом массивов чаров (C++):

Умножение массива чаров - C++
#include <iostream> using namespace std; int main() { char a; cin.getline(a, 10); int i; int b =...

Очистить массив чаров - C++
#include "stdafx.h" #include <algorithm> #include <iostream> #include <locale> #include <windows.h> #include <sstream> using...

Считывание чаров из cin происходит не корректно - C++
Доброго времени суток! В процедуре void Enter(char* massive) считываю чары в массив. Если в строке больше 20 символов то процедура void...

Считать символы из вектора в массив чаров - C++
Задача из вектора string перекидать значения в массив чаров, каждый элемент вектора это должен быть один из массивов... Я не могу сделать...

Есть куча рандомных чаров к примеру 100млн - C++
Есть куча рандомных чаров к примеру 100млн какой алгоритм их отсортирует быстрей всего?

Можно ли в массив чаров считать строку полностью? - C++
У меня получается считать только первое слово, понимаю что есть функция getline() и еще я какую-то похожую видел, но желательно без этих...

6
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
12.12.2012, 17:44 #2
Класс std::string не подходит вместо массива строк Си?
И непонятно, зачем ковыряться с названиями файлов? Выходит, что две одинаковые команды он выполнить не может. Не проще сделать один фаил и уже из него считывать последовательность команд?
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
12.12.2012, 18:52  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Класс std::string не подходит вместо массива строк Си?
Мне бы не хотелось использовать дополнительные классы без крайней нужды. Честно говоря, и так сойдёт, как есть, но всё же хотелось бы чуть поумнее организовать это всё. Например, чтобы перебирать команды/файлы в цикле.

И непонятно, зачем ковыряться с названиями файлов? Выходит, что две одинаковые команды он выполнить не может. Не проще сделать один фаил и уже из него считывать последовательность команд?
Не имеет смысла. Команды подаются по одной. Потом файл стирается и прога ждёт следующую команду. По некоторым причинам мне так удобнее. К тому же проверка существования файла гораздо проще и быстрее, чем чтение из него.
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
15.12.2012, 18:10 #4
Цитата Сообщение от Vtulhu Посмотреть сообщение
Не имеет смысла. Команды подаются по одной. Потом файл стирается и прога ждёт следующую команду. По некоторым причинам мне так удобнее.
Другими словами, одновременно в данной папке не может находится две одинаковые команды. Значит в одно время, одна подпрограмма проверяет есть ли фаил, выполняет команду, удаляет фаил, вторая - как-то генерирует команды и создает файлы?
Цитата Сообщение от Vtulhu Посмотреть сообщение
К тому же проверка существования файла гораздо проще и быстрее, чем чтение из него.
Очень, очень сомнительно.
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
17.12.2012, 11:32  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Другими словами, одновременно в данной папке не может находится две одинаковые команды.
И две разные - тоже не могут. Специфика всего процесса такова, что эти ситуации невозможны и бессмысленны.

Значит в одно время, одна подпрограмма проверяет есть ли фаил, выполняет команду, удаляет фаил, вторая - как-то генерирует команды и создает файлы?
Всё правильно, за исключением того, что это не две подпрограммы, а две программы, причём на разных языках. И даже исполнение программ очень разное (DLL и скрипт). Этим и объясняется межпроцессное взаимодействие через файлы.

Очень, очень сомнительно.
Вы хотите сказать, что WinApi-функция GetFileAttributes исполняется дольше, чем цикл fopen-fgets-fclose? Да и в любом случае, даже если дольше, то вызвать одну функцию проще, чем огород городить с чтением, парсингом и т.д.
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 09:43 #6
Цитата Сообщение от Vtulhu Посмотреть сообщение
чем цикл fopen-fgets-fclose?
в цикле будет только считывание строки из файла, а открытие и закрытие будет единожды.
Цитата Сообщение от Vtulhu Посмотреть сообщение
что WinApi-функция GetFileAttributes исполняется дольше
Проверьте в цикле.
Цитата Сообщение от Vtulhu Посмотреть сообщение
то вызвать одну функцию проще, чем огород городить с чтением
никто не мешает написать свою функцию и вызывать её. Думаете, что GetFileAttributes очень просто устроен?
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
19.12.2012, 12:55  [ТС] #7
Цитата Сообщение от Croessmah Посмотреть сообщение
в цикле будет только считывание строки из файла, а открытие и закрытие будет единожды.
Я имел в виду всю последовательность fopen-fgets-fclose, не зацикливание в "программистском" смысле этого слова.

никто не мешает написать свою функцию и вызывать её. Думаете, что GetFileAttributes очень просто устроен?
Вы заставили меня задуматься... А как проверить существование файла с помощью fopen? А что касается своей функции, то у меня так и сделано, просто она состоит из одной строчки return (GetFileAttributes(fname) != DWORD(-1));
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 12:55
Привет! Вот еще темы с ответами:

Порядок байт. Массив чаров приводится к типу unsigned int. - C++
Есть массив из 4 char. Массив приводится к типу unsigned int и затем данные извлекаются в переменную типа unsigned int. Нужно, чтобы байты...

Строки. Заменить символы - цифры на символ '*'. В заданной строке заменить подряд идущие пробелы - C++
П.5.16.Правил Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема. ...

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

Использование массивов заменить использованием указателей в приведенном коде - C++
Помогите решить две задачи через указатели. Я их сделал через массив а через указатели не получается заранее спасибо вот первая...


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

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

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