Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 50
1

Работа с командной строкой

10.01.2019, 14:47. Показов 3364. Ответов 9
Метки нет (Все метки)

насколько я понимаю, что командная строка принимает только строковые данные, и работа с командной строкой идет до запуска программы. Не понимаю, как в командной строке задать первый элемент динамического массива?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2019, 14:47
Ответы с готовыми решениями:

Работа с командной строкой виндовс
Нужно написать две программы на языке си. После чего через командную строку(cmd) их запустить...

Работа с файлами и командной строкой
Добрый день. В Си совсем новичок, прошу помощи, хочу и нужно разобраться. Стоит такая задача:...

Работа с командной строкой
можно ли использую свою собственную SE программу переадресовывать конкретные команды на выполнение...

Работа с командной строкой
Здравствуйте возник ряд различных вопросов, связанных с командной строкой в Windows. Прошу Вас...

9
291 / 223 / 101
Регистрация: 11.08.2016
Сообщений: 776
10.01.2019, 14:59 2
Marikoo, ваша программа во время вызова из командной строки может принять два аргумента :
1. Индекс массива(количество введенных аргументов);
2. Массив указателей.

Конструкция выглядит так :
C
1
2
3
4
int main(int argc, char * argv[])
{
    ...
}
Вы можете спокойно вызвать программу и ввести список аргументов:
Код
myprog.exe arg1
И записать arg1 в выделенный динамически массив.
Только следует учесть, что обращаться к массиву аргументов следует через декримент(последний всегда указывает на NULL). При вызове программы без аргументов, в списке как минимум будет храниться 1 аргумент - название программы "myprog.exe".
Посему обращение к 1 аргументу будет выглядеть так(на примере с printf()):
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    printf("%s", argv[--argc]);
    return 0;
}
1
3316 / 1897 / 365
Регистрация: 09.09.2017
Сообщений: 7,727
10.01.2019, 15:50 3
D3m1an, у вас идет перебор с конца, но можно и с начала:
C
1
2
3
4
5
#include <stdio.h>
int main(int argc, char *argv[]){
  printf("Program [%s] with %i arguments:\n", argv[0], argc-1);
  for(int i=1; i<argc; i++)printf("%s\n", argv[i]);
}
Marikoo, в задании явно сказано что массив должен быть передан через аргументы командной строки? А то можно ведь считывать во время выполнения.
0
291 / 223 / 101
Регистрация: 11.08.2016
Сообщений: 776
10.01.2019, 17:37 4
COKPOWEHEU, конечно можно. Но удобнее...да и для этого создан даже этот счётчик, чтобы проверить наличие аргументов.
Вообще, я считаю, что можно все ... Нужно только написать это
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 50
10.01.2019, 20:25  [ТС] 5
ну с командной строки задать координату по x. Получается, что через аргументы. С командной строкой не работал до этого, вот и вышел затык.
0
Evg
Эксперт CАвтор FAQ
21191 / 8208 / 632
Регистрация: 30.03.2009
Сообщений: 22,515
Записей в блоге: 30
10.01.2019, 21:03 6
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
D3m1an, у вас идет перебор с конца, но можно и с начала:
Ты же сам нормальный и понятный пример писал: Аргументы командной строки
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 50
10.01.2019, 22:13  [ТС] 7
так вот) получается у меня как подкоманда, т.е. я с параметром запускаю прогу, задаю координату
0
Evg
Эксперт CАвтор FAQ
21191 / 8208 / 632
Регистрация: 30.03.2009
Сообщений: 22,515
Записей в блоге: 30
11.01.2019, 14:53 8
Ты примеры смотрел? Ручками их щупал? Ну вот возьми и сделай точно так же, только то, что тебе нужно. В чём проблема-то?
0
291 / 223 / 101
Регистрация: 11.08.2016
Сообщений: 776
11.01.2019, 16:59 9
Marikoo, вот пример. Поможет разобраться может быть.

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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
    int x, y;
 } pt_t;
 
int main(int argc, char *argv[])
{
    int n;
    pt_t point;
    
    //хватает аргументов?
    if(--argc != 2) 
    {
        puts("error args. enter x y");
        return -1;
    }
    
    //записываем
    point.y = atoi(*(argv + argc--));
    point.x = atoi(*(argv + argc--));
    
    //выводим
    printf("x = %d; y = %d\n", point.x, point.y);
    return 0;
}
0
Evg
Эксперт CАвтор FAQ
21191 / 8208 / 632
Регистрация: 30.03.2009
Сообщений: 22,515
Записей в блоге: 30
11.01.2019, 18:52 10
Цитата Сообщение от D3m1an Посмотреть сообщение
Поможет разобраться может быть
С автодекрементацией, которая почему-то так тебе нравится, пример скорее запутает, чем поможет. Не понятно, что мешает взять его и написать просто и понятно, чтобы код можно было взять и прочитать, а не сидеть и не высчитывать каждый раз что-то в уме, чтобы понять, что же тут делается

C
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
    int x, y;
 } pt_t;
 
int main(int argc, char *argv[])
{
    int n;
    pt_t point;
    
    //хватает аргументов?
    if(argc != 3) 
    {
        puts("error args. enter x y");
        return -1;
    }
    
    //записываем
    point.x = atoi(argv[1]);
    point.y = atoi(argv[2]);
    
    //выводим
    printf("x = %d; y = %d\n", point.x, point.y);
    return 0;
}
достаточно было 3 обращения к argc переписать по человечески, чтобы гавнокод превратился в понятный код
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2019, 18:52

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Работа с командной строкой
Доброго времени суток! Вопрос одновременно глупый, и не очень. Суть такова - хочу из своей...

Работа с командной строкой
Здравствуйте. Хочу проверить изменялось ли имя exeшного файла .запускаю из командной строки и...

Работа с командной строкой
Здравствуйте! Не подскажите как можно работать с командной строкой в си++? Я имею ввиду через...

Работа с командной строкой
Добрый день. Извиняюсь, что заголовок не совсем соответствует вопросу. Понимаю, что тема...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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