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

Аргументы командной строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
08.08.2012, 22:35     Аргументы командной строки #1
Здравствуйте, у меня вопрос, почему программа сбрасывается, так и не выполнив никаких действий?
Я знаю , что она возвращает 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
41
42
43
44
#include "stdafx.h"
#include "stdlib.h"
#include <conio.h>
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <stdexcept>
 
int StringToInt(const char * str, bool & err)
{
char * pLastChar = NULL;
int param = strtol(str, &pLastChar, 10);
err = ((*str == '\0') || (*pLastChar != '\0'));
return param;
}
 
int main(int argc, char* argv[])
{
if (argc <= 1)
{
printf("Program calculates sum of its command line arguments.\n");
return 0;
}
int sum = 0;
for (int i = 1; i < argc; ++i)
{
bool err;
int param = StringToInt(argv[i], err);
if (err)
{
printf("Argument #%d is not a number\n.", i);
return 1;
}
printf("%d", param);
sum += param;
if (i != argc-1)
{
printf(" + ");
}
}
printf(" = %d", sum);
system("pause");
}
Спасибо, всем откликнувшимся
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 22:35     Аргументы командной строки
Посмотрите здесь:

C++ Аргументы командной строки
C++ Неясность (аргументы командной строки)
C++ Аргументы командной строки
C++ Аргументы командной строки
Аргументы командной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.08.2012, 22:50     Аргументы командной строки #2
пройди в дибаггере пошагово и увидишь сам.
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
08.08.2012, 23:00  [ТС]     Аргументы командной строки #3
Цитата Сообщение от novi4ok Посмотреть сообщение
пройди в дибаггере пошагово и увидишь сам.
Прошёл, но как мне это исправить? Если можно объясните пожалуйсто.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.08.2012, 23:24     Аргументы командной строки #4
У меня программа работает. Как вы ее запускаете?
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
08.08.2012, 23:33  [ТС]     Аргументы командной строки #5
у меня VS 2010 Ultimate, там на отладку и всё. Она работает, но сразу выходит и ввести ни чего не даёт.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.08.2012, 23:55     Аргументы командной строки #6
Цитата Сообщение от Александер1 Посмотреть сообщение
Она работает, но сразу выходит и ввести ни чего не даёт.
естественно она сразу выходит, ведь программа работает с аргументами командной строки

меню проект->свойства->отладка->аргументы как-то так, там пишите допустим 2 3
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
09.08.2012, 00:05  [ТС]     Аргументы командной строки #7
defer , спасибо большое. Можно попросить вас стать моим, так сказать, наставником. я студент, изучаю с++(пока лето и время есть), а с лабами проблема(у меня их много и порой не очень понятно).
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.08.2012, 00:35     Аргументы командной строки #8
Задавайте вопросы на форуме и будет у вас много наставников

Не по теме:

только не всех надо слушать

Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
09.08.2012, 11:56  [ТС]     Аргументы командной строки #9
почему, при запуске .bat, в командной строке не выводятся слова по русски и по англиски, вместо этого непонятные символы.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
09.08.2012, 13:01     Аргументы командной строки #10
Цитата Сообщение от Александер1 Посмотреть сообщение
почему, при запуске .bat, в командной строке не выводятся слова по русски и по англиски,

Не по теме:

каждый вопрос отдельная тема, а то нелегко рыться в старых темах


.bat то в блокноте пишешь?
если да то там Windos кодировка а в в консоли DOS
самый простой выход- поставь в Блокноте шрифт Terminal он работает с DOS - кодировкой
Jupiter
09.08.2012, 16:00
  #11
 Комментарий модератора 
Одна тема - один вопрос!
-=ЮрА=-
Заблокирован
Автор FAQ
10.08.2012, 15:47     Аргументы командной строки #12
Цитата Сообщение от Александер1 Посмотреть сообщение
float StringToInt(const char * str, bool & err)
{
* * char * pLastChar = NULL;
* * float param = strtol(str, &pLastChar, 10);
* * * * err = ((*str == '\0') || (*pLastChar != '\0'));
* * return param;
}
- бог мой зачем столько кода ИМХО это проще вот так делать
C
1
2
3
4
5
6
float StringToInt(const char * str, bool & err)
{
    float param = 0;
    sscanf(str,"%lf",&param);
    return param;
}
единственно мне название функции не нравиться уже тогда StringToFloat
читай об sscanf здесь http://www.cplusplus.com/reference/c...cstdio/sscanf/
-=ЮрА=-
Заблокирован
Автор FAQ
10.08.2012, 16:05     Аргументы командной строки #13
Александер1, вот решение твой задачи сложения двух параметров командной строки
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
#include <stdio.h>
 
int main(int argc, char * argv[])
{
    double a = 0;
    double b = 0;
    double c = 0;
    if(argc < 3)
        printf("Unless pprogram params\n");
    else
    {
        if(!sscanf(argv[1],"%lf",&a))
            printf("Parsing 1-st param error\n");
        else
        if(!sscanf(argv[2],"%lf",&b))
            printf("Parsing 2-nd param error\n");
        else
        {
            printf("a = %lf\n", a);
            printf("b = %lf\n", b);
            c = a + b;
            printf("a + b = %lf\n",c);
        }
    }
    return 0;
}
Проверка http://liveworkspace.org/code/2e75ef...aafc530c06146f
Миниатюры
Аргументы командной строки  
Вложения
Тип файла: rar plusArgs.exe.rar (18.5 Кб, 6 просмотров)
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
10.08.2012, 17:43     Аргументы командной строки #14
Как вариант решения задачи c boost:rogram_arguments..

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
#include <iostream>
#include <exception>
#include <stdexcept>
#include <cstdlib>
 
#include <boost/program_options.hpp>
 
namespace po = boost::program_options;
 
template <typename T>
auto GetSumArguments(T first, T second) -> decltype (first + second) {
    return first + second;
}
 
int main(int argc, char** argv) {
    int value_first = 0;
    int value_second = 0;
    po::options_description description("allowed options");
    description.add_options()
        ("help,h", "produce help message")
        ("valule_1,1", po::value<int>(&value_first)->default_value(0), "set 'value_1'")
        ("value_2,2", po::value<int>(&value_second)->implicit_value(0), "set 'value_2'");
    po::variables_map options;
    
    try {
        po::store(po::parse_command_line(argc, argv, description), options);
        po::notify(options);
    } catch (const std::exception & exc) {
        std::cerr << exc.what() << std::endl;
        exit(0);
    }
    
    if (options.count("help")) {
        std::cout << description << std::endl;
        exit(0);
    }
    
    std::cout << "Sum of arguments: " << GetSumArguments(value_first, value_second) << std::endl;
}
Bash
1
2
3
nameless@l49-53-61:~/cpp/boost_po$ g++ -std=c++11 main.cpp -o main -lboost_program_options
nameless@l49-53-61:~/cpp/boost_po$ ./main -1 10 -2 34
Sum of arguments: 44
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
11.08.2012, 22:41  [ТС]     Аргументы командной строки #15
http://liveworkspace.org/code/2e75ef...aafc530c06146f[/QUOTE]
Юр, по этому коду VS 2010 ругается на sscanf и не опредиляет его, может быть библиотеки нехватает?
Но прога запускается, и после выполнения сразу закрывается getch() тоже не помогает, что делать?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
11.08.2012, 22:56     Аргументы командной строки #16
новая задача новая тема
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2012, 00:14     Аргументы командной строки
Еще ссылки по теме:

C++ Передать аргументы командной строки
C++ Аргументы командной строки
C++ Распечатать аргументы командной строки

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

Или воспользуйтесь поиском по форуму:
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
12.08.2012, 00:14  [ТС]     Аргументы командной строки #17
Цитата Сообщение от ValeryS Посмотреть сообщение
новая задача новая тема
Это та же задача.

Добавлено через 1 час 17 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Александер1, вот решение твой задачи сложения двух параметров командной строки
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
#include <stdio.h>
 
int main(int argc, char * argv[])
{
    double a = 0;
    double b = 0;
    double c = 0;
    if(argc < 3)
        printf("Unless pprogram params\n");
    else
    {
        if(!sscanf(argv[1],"%lf",&a))
            printf("Parsing 1-st param error\n");
        else
        if(!sscanf(argv[2],"%lf",&b))
            printf("Parsing 2-nd param error\n");
        else
        {
            printf("a = %lf\n", a);
            printf("b = %lf\n", b);
            c = a + b;
            printf("a + b = %lf\n",c);
        }
    }
    return 0;
}
Проверка http://liveworkspace.org/code/2e75ef...aafc530c06146f
Спасибо разобрался.
Yandex
Объявления
12.08.2012, 00:14     Аргументы командной строки
Закрытая тема Создать тему
Опции темы

Текущее время: 02:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru