Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
skvor
640KB мне хватило на всё.
118 / 49 / 3
Регистрация: 07.06.2009
Сообщений: 442
1

Определить константы по аргументам командной строки

20.09.2014, 11:23. Просмотров 375. Ответов 10
Метки нет (Все метки)

Туплю над subj'ем.

Команда
./prog raz dva tri

Программа должна инициализировать константы значением из *argv[] или, если аргументы не заданы, то ставить некоторое значение по умолчанию.

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2014, 11:23
Ответы с готовыми решениями:

Определить все данные, тип которых вводится из командной строки
Файл содержит символы, слова, целые числа и числа с плавающей запятой. ...

В параметрах командной строки передается список слов. Определить и вывести на экран слово максимальной длины.
Необходимо разработать программу согласно варианту задания. Данные в ...

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp
С помощью командной строки >namberstr f1.cpp Определить число строк в файле с...

Конкатенация строки-константы и int
Есть константа "sorting.exe " и int i. Нужно объединить их в один char, чтобы...

Слияних 2 файлов в третий + строки + использование командной строки
Помогите с заданием пожалуйста. Задано 2 файла, строки в которых упорядочены...

10
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
20.09.2014, 11:51 2
Цитата Сообщение от skvor Посмотреть сообщение
инициализировать константы значением
инициализировать константы или имитировать инициализацию?
0
skvor
640KB мне хватило на всё.
118 / 49 / 3
Регистрация: 07.06.2009
Сообщений: 442
20.09.2014, 12:22  [ТС] 3
Цитата Сообщение от KOPOJI Посмотреть сообщение
имитировать инициализацию
-а что такое "имитировать"? Как можно имитировать инициализацию?

Впрочем, спасибо, тупак прошёл

const int dva=(проверка наличия второго параметра && его корректность)?(преобразование строки в число)дефолтное значение);

Просто сперва упёрся, как это можно сделать с if'ом, ведь нельзя в двух ветвях объявлять одну константу.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.09.2014, 12:29 4
Используй тернарный оператор. Например так:
C++
1
const int c = ( argc>2 && valid(argv[2]) ) ? atoi(argv[2]) : defaultValue;
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,949
Завершенные тесты: 1
20.09.2014, 13:13 5
Я полагал, что константы могут инициализироваться только значениями,
известными на этапе компиляции.
Разве это не так?
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.09.2014, 13:18 6
Цитата Сообщение от zss Посмотреть сообщение
Разве это не так?
Не так. Константы разные бывают. Есть времени компиляции, а есть времени выполнения.
C++
1
2
3
int n = 0;
cin >> n;
const int m = n; // m менять нельзя, но значение не известно на момент компиляции
1
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16754 / 6645 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
20.09.2014, 13:36 7
Цитата Сообщение от skvor Посмотреть сообщение
-а что такое "имитировать"? Как можно имитировать инициализацию?
Ну я думал, что пользователь может вводить любые имена констант и потом должен это увидеть или может даже дальше в выражении использовать.. Нечто наподобие такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <map>
 
int main(int argc, char* argv[])
{
    std::map<std::string, int> constants;
    for(int i = 1; i < argc; ++i)
    {
        std::size_t pos;
        std::string name = argv[i];
        int value = 0;
        if((pos = name.find('=')) != std::string::npos)
        {
            value = std::stoi(name.substr(pos + 1).c_str());
            name = name.substr(0, pos);
        }
        constants[name] = value;
    }
    
    for(std::map<std::string, int>::const_iterator it = constants.begin(), end = constants.end(); it != end; ++it)
        std::cout << it->first << " => " << it->second << std::endl;
}
0
skvor
640KB мне хватило на всё.
118 / 49 / 3
Регистрация: 07.06.2009
Сообщений: 442
20.09.2014, 13:48  [ТС] 8
Цитата Сообщение от zss Посмотреть сообщение
Разве это не так?
Раньше - да, сейчас - можно переменные и константы определять где хочешь. С какого стандарта C/C++ это пошло - не знаю.
Цитата Сообщение от Tulosba Посмотреть сообщение
Есть времени компиляции, а есть времени выполнения.
Мне кажется, это неправильно. Языки C/C++ не определяют переменные и константы во время выполнения. Разница с/без const в конечном исполняемом коде может не отражаться. Компилятор просто тупо контролирует, чтоб const "переменная" после инициализации не появилась слева от присваивания.
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,949
Завершенные тесты: 1
20.09.2014, 14:03 9
С такими константами возникают такие проблемы:
C++
1
2
3
4
    int i;
    std::cin >> i;
    const int N=i;
    int A[N];
1>d:\current\cpp\test\tset.cpp(10) : error C2057: требуется константное выражение
1>d:\current\cpp\test\tset.cpp(10) : error C2466: невозможно выделить память для массива постоянного нулевого размера
1>d:\current\cpp\test\tset.cpp(10) : error C2133: A: неизвестный размер
0
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
20.09.2014, 14:15 10
Цитата Сообщение от zss Посмотреть сообщение
Я полагал, что константы могут инициализироваться только значениями,
известными на этапе компиляции.
Для обозначения констант времени компиляции в С++11 существует ключевое слово constexpr

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
С такими константами возникают такие проблемы
то, что вы хотите объявить - VLA. В gcc с этим проблем не будет, хотя данное поведение не предусмотрено стандартом С++ (в С99 можно).
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.09.2014, 14:45 11
Цитата Сообщение от skvor Посмотреть сообщение
Языки C/C++ не определяют переменные и константы во время выполнения.
В сях вообще полноценных констант нет, приходится с #define играться. А если говорить про плюсы, то конечно, вся проверка константности (т.е. неизменности после инициализации) производится во время компиляции. Но вот сами значения этих констант могут быть известны либо в момент компиляции (инициализированы constexpr выражениями), либо в момент выполнения (инициализированы не-constexpr выражениями).
0
20.09.2014, 14:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2014, 14:45

Ввести две стрингов константы. Определить совпадение их компонент.
Уважаемые кто что-либо знает в решении следующих задач (использование string.h)...

Аргументы командной строки
Уважаемые форумчане, растолкуйте, пожалуйста, назначение третьего аргумента...

Аргументы командной строки
Здравствуйте, у меня вопрос, почему программа сбрасывается, так и не выполнив...


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

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

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