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

Разбор сложной строки с аргументами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Argc и Argv http://www.cyberforum.ru/cpp-beginners/thread634117.html
Всем привет, у меня такой вопрос, как правильно вызвать данную функцию int test(int argc, char* argv){ } Я делала так, но компилятор выдает ошибки int main(int argc, char* argv){ for( i = 1; i<argc; i++) test(1, argv = "-n 1") } Что-то я неправильно делаю...
C++ Компилятор не видит заголовочные файлы >Quiet Snow<, вот тут все описано :) Как сделать, чтобы он инклюды видел? Взято отсюда http://www.cyberforum.ru/cpp-beginners/thread634108.html
C++ не получаеться привязать dll к проге
не получаеться привязать dll к проге case 1001: //загрузим форму из DLL HMODULE hMod = LoadLibrary(L"lpnwf.dll"); //BOOL myRegClass(HINSTANCE hInst, int cmdMode); BOOL (*myRegClass)(HINSTANCE, int);
Перевод из числа в строку C++
Решил написать простую программу,переводящую число int-е в массив символов. Проблема в том,что когда мы вызываем ее так,что число передается непосредственно,то все нормально,но когда ставим переменную,то программа у меня рушится. Прошу помочь с этим,а то я не понимаю никак что у меня неправильно.. #include <iostream> #include <cmath> #include <cstring> using namespace std; int...
C++ Возвращаемое значение функции - массив http://www.cyberforum.ru/cpp-beginners/thread634086.html
Здравствуйте, Друзья. Скажите пожалуйста - из функции одномерный массив можно передать в функцию main() или нет? Если да - как. За ранее благодарю Вас.
C++ Ввод в другие программы Меня интересует: Можно ли написать программу на C++, которая вводила бы данные в другие программы (Например:в окне программы есть поля для заполнения, но заполнить их надо через нашу программу на C++).И если да то как? подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
08.08.2012, 20:57     Разбор сложной строки с аргументами
NoobIsCome, не вполне понял логику вашего решения. Вы что, тупо читаете все символы до и после запятой?... А зачем вам float на выходе?

Я бы сделал так:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdio.h>
#include <wchar.h>
 
/*
 * Определяем структуру команды
 */
 
#define COMMAND_ERROR 0
#define COMMAND_READ  1
#define COMMAND_WRITE 2
 
typedef
struct
{
    char command;
    unsigned address, offset;
}
command_t;
 
 
/*
 * Функция для разбора строки команды
 *
 * str - строка команды
 * ret - выходная структура
 *
 * возвращает:
 *    0 - в случае успеха
 *    не 0 - в случае ошибки
 *
 * формат строки команды:
 *    [cmd]#[addr],[offset]
 *        cmd - rb или wb
 *        addr - адрес в hex
 *        offset - смещение в hex
 *
 */
 
int
string_to_command( const wchar_t * str, command_t * ret )
{
    size_t sharp_pos = 0;
    wchar_t * sharp_ptr;
 
    if( NULL == ( sharp_ptr = wcschr( str, L'#' ) ) )
    {
        fputs( "Cannot find #\n", stderr );
        return 1;
    }
 
    sharp_pos = ( sharp_ptr - str ) / sizeof( wchar_t );
 
    if( 0 == wcsncmp( L"rb", str, sharp_pos ) )
        ret->command = COMMAND_READ;
    else if( 0 == wcsncmp( L"wb", str, sharp_pos ) )
        ret->command = COMMAND_WRITE;
    else
    {
        fputs( "Bad command", stderr );
        return 1;
    }
 
    if( 2 != swscanf( sharp_ptr + 1, L"%x,%x", &( ret->address ), &( ret->offset ) ) )
    {
        fputs( "Bad addr", stderr );
        return 1;
    }
 
    return 0;
}
 
 
 
/*
 * Проверяем
 */
 
int
main()
{
#define INPUT_STRING_LENGTH 256
    wchar_t input_string [ INPUT_STRING_LENGTH ];
 
    fputs( " > ", stdout );
 
    if( 0 == fgetws( input_string, INPUT_STRING_LENGTH, stdin )
            && ferror( stdin ) )
    {
        perror( "input" );
        return 1;
    }
 
    command_t input_command;
 
    if( 0 != string_to_command( input_string, &input_command ) )
    {
        return 1;
    }
 
    if( input_command.command == COMMAND_READ )
        printf( "CMD: read from %08x:%08x\n", input_command.address, input_command.offset );
    else if( input_command.command == COMMAND_WRITE )
        printf( "CMD: write to %08x:%08x\n", input_command.address, input_command.offset );
    else
    {
        fputs( "CMD: unknown\n", stderr );
        return 1;
    }
 
    return 0;
}
Добавлено через 1 минуту
И ещё: почему wchar_t?
 
Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru