Форум русскоязычного сообщества Ubuntu


Автор Тема: Помогите с захватом аргументов из командной строки.  (Прочитано 521 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Demik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Здравствуйте, вот пытаюсь научить программу работать с ключами, но запнулся в самом начале, подскажите что я делаю не так? Или может уже есть изобретенный велосипед?Забыл скачать, getopt использовать нелььзя = (
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main ( int argc , char *argv[] ) {
int checkA=0 ,checkB=0 ;
if ( argc == 1 )
printf ("Аргументы не заданы \n");
for ( int i = 1 ; i < argc;  i++ ){
switch ( *argv[i] ){
case 'a':
checkA=1;
printf ("%d\n", checkA);
case 'b':
  checkB=1;
printf ("%d\n", checkB);
}
}
return 0;
}
« Последнее редактирование: 14 Март 2012, 04:54:19 от Demik »

Оффлайн VlaoMao

  • Активист
  • *
  • Сообщений: 308
  • ArchLinux - eMachines e725 && Nokia N950
    • Просмотр профиля
А что мешает getopt использовать?
« Последнее редактирование: 14 Март 2012, 12:14:37 от VlaoMao »

Оффлайн Demik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Задание преподавателя = ). Сказала "Вы должны помучаться"

Оффлайн CynicRus

  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
for (i = 0; i < argc; ++i) {
        if ( *(((char **)argv)[i]) == '-' ) {
            option_ptr = ((char **)argv)[i];
            j = i;
            for (;j < (argc - 1); ++j) {
                ((char **)argv)[j] = ((char **)argv)[j + 1];
            }
            --argc;
            --i;
            switch (tolower(option_ptr[1])) {
            case 'x':
                ShutdownMe = TRUE;
                break;

            case 'p':
                RemotePort = atoi(&option_ptr[2]);
                break;

            case 'r':
                strncpy( RemoteSystem, &option_ptr[2], sizeof(RemoteSystem ) );
                break;

            default:
                break;
            }
        }
    }

    return 0;
}
Ну вот как-то так например...способов много на самом деле-)
"Only two things are infinite, the universe and human stupidity... and I'm not sure about the universe."  -- Albert Einstein

Оффлайн Demik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Огромное спасибо, сейчас поэксперементирую. А option_ptr, как я понял это интовская переменная, да? А вы гне могли бы объяснить, что мы делаем вот тут:
if ( *(((char **)argv)[i]) == '-' ) {
            option_ptr = ((char **)argv)[i];
            j = i;
            for (;j < (argc - 1); ++j) {
                ((char **)argv)[j] = ((char **)argv)[j + 1];
            }
            --argc;
            --i;
« Последнее редактирование: 14 Март 2012, 15:00:28 от Demik »

Оффлайн CynicRus

  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
Извиняюсь, не до конца скопипастил:

int parse_argv(int argc, char **argv)
{
    int     i, j;
    char    *option_ptr;

    //  Сканируем командную строку в поисках параметров.  Забираем копии аргументов,
    //  и разбираем их. 
    for (i = 0; i < argc; ++i) {
        if ( *(((char **)argv)[i]) == '-' ) {
            //  нашли
            option_ptr = ((char **)argv)[i];
            j = i;
            for (;j < (argc - 1); ++j) {
                ((char **)argv)[j] = ((char **)argv)[j + 1];
            }
            --argc;
            --i;

            //  разбор опций
            switch (tolower(option_ptr[1])) {
            case 'x':
                ShutdownMe = TRUE;
                break;

            case 'p':
                RemotePort = atoi(&option_ptr[2]);
                break;

            case 'r':
                strncpy( RemoteSystem, &option_ptr[2], sizeof(RemoteSystem ) );
                break;

            default:
                break;
            }
        }
    }

    return 0;
}

"Only two things are infinite, the universe and human stupidity... and I'm not sure about the universe."  -- Albert Einstein

Оффлайн Demik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Спасибо ещё раз за помощь = )

 

Страница сгенерирована за 0.074 секунд. Запросов: 25.