Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35

Передача данных в функцию

21.07.2014, 12:33. Показов 1501. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане!
Интересует следующий странно глупый вопрос...
Не могу понять! Вот никак.
Есть фукция:
C++
1
2
3
4
5
6
7
8
9
10
int solve(int count_of_digits)
{
        int start, end;
        if (count_of_digits == 2) { start = 10; end = 99; }
        if (count_of_digits == 3) { start = 100; end = 999; }
 
        // ... тут происходят разные события
 
        return max;
}
И есть ее вызов в мейне.
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
        assert(solve(2) == 9009);
        auto  now = std::chrono::high_resolution_clock::now();
        auto answer = solve(3);
        auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - now);
        std::cout << "Answer = " << answer << "\n";
        std::cout << "Time : " << elapsed.count() << "ns.\n";
        return 0;
}
Не пойму, почему при передаче значения в функцию, туда приходит мусор?
Если я изменю сигнутару solve на такую:
C++
1
int solve(const int& count_of_digits)
всё правильно передаёт.
Объясните, пожалуйста...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.07.2014, 12:33
Ответы с готовыми решениями:

Передача данных в функцию
Подскажите пожалуйста, передаю в функцию набор значений, и пытаюсь производить с ними действия: void poly(const int N, const double...

Передача данных в функцию
как лучше передавать примитивные типы данных в функцию по ссылке или по значению? В учебниках обычно пишут, что по ссылке. На практике...

Не происходит передача данных в функцию
Не пойму что не так Надо что бы из функции interval брались 2 переменные, что я не так написал? Забираю переменные ниже строки cout...

16
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.07.2014, 12:42
Какой "мусор"? Как выяснили что там мусор? Конкретный пример можно?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
21.07.2014, 12:44  [ТС]
Пошагово отлаживала и смотрела значения переменных.
При первом запуске пришло 4323284, потом 2095280 и так далее.
Если нужно - могу скрин приложить.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.07.2014, 12:47
А если между 2-й и 3-й строками вставить: std::cout << count_of_digits << std::endl;
И вызвать функцию с параметром 3, то что выведет программа?
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
21.07.2014, 12:48
Общее замечание - крайне нежелательно помещать пользовательский код в макрос assert. Попробуйте записать условие следующим образом:
C++
1
2
int temp = solve(2) ;
assert(temp == 9009);
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
21.07.2014, 12:52  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
А если между 2-й и 3-й строками вставить: std::cout << count_of_digits << std::endl;
И вызвать функцию с параметром 3, то что выведет программа?
Чёрт... Таки три выводит...
Компилятор ошибками плевался после ифчиков... Подумала, что проблема с этой переменной, так как при брейкпоинте показала кашу.
Спасибо!

Добавлено через 51 секунду
Цитата Сообщение от Ilot Посмотреть сообщение
Общее замечание - крайне нежелательно помещать пользовательский код в макрос assert. Попробуйте записать условие следующим образом:
Исправила.
А почему нежелательно?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
21.07.2014, 12:59
Цитата Сообщение от Тамика Посмотреть сообщение
А почему нежелательно?
Во-первых, при релизе все ассерты как правило удаляются. Второе следствие первого удалится код и все результаты его работы и т.д. Другими словами ассерт не предназначет для программирования, а только лишь для проверки конкретных условий. Кто знает, что на самом деле может сделать вызов solve(2)...
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
21.07.2014, 13:01
Цитата Сообщение от Тамика Посмотреть сообщение
А почему нежелательно?
Цитата Сообщение от Ilot Посмотреть сообщение
Во-первых, при релизе все ассерты как правило удаляются.
Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
//#define NDEBUG
#include <cassert>
 
int foo ()
{
    int x ;
    std::cin >> x ;
    return x ;
}
 
int main()
{
    std::cout << "begin\n" ;
    assert ( foo() != 5 ) ;
    std::cout << "end" << std::endl ;
}
Скомпилируй, запусти, проверь как работает. Потом "раскоментируй" строчку и повтори найди отличия в работе
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
21.07.2014, 13:04
Тамика, быть может, вы проект в Release дебажить пытаетесь? Похоже очень на вашу проблему
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
21.07.2014, 13:06
Цитата Сообщение от Croessmah Посмотреть сообщение
Скомпилируй, запусти, проверь как работает. Потом "раскоментируй" строчку и повтори найди отличия в работе
А в чем сакральный смысл?
0
21.07.2014, 13:07

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
А в чем сакральный смысл?
это не Вам :) Код просто как пояснение к "при релизе все ассерты как правило удаляются."

0
21.07.2014, 13:09

Не по теме:

Croessmah, ну хорошо... а то я было подумал кошачий заговор]:->

0
21.07.2014, 13:16

Не по теме:

Ilot, мыши взбунтовались :D Да, Гайчушка? :-[:D

0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
21.07.2014, 13:19
Тамика, небольшой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#define NDEBUG
#include <cassert>
int foo (int& x) {
    x = 4;
    return x;
}
int main() {
    int x;
    assert ( foo(x) != 5 ) ;
    std::cout << x << std::endl ;
    return 0;
}
Операции те же, что указал Croessmah.
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
21.07.2014, 13:31  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Тамика, небольшой пример:
У меня он не компилируется ввиду неинициализации переменной х.

Добавлено через 3 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Скомпилируй, запусти, проверь как работает. Потом "раскоментируй" строчку и повтори найди отличия в работе
В случае раскоментирования программа просто игнорирует ассерт. Даже если я введу пять.

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
Тамика, небольшой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#define NDEBUG
#include <cassert>
 
int foo (int& x) {
    x = 4;
    return x;
}
int main() {
    int x;
    std::cin >> x;
    assert ( foo(x) != 5 ) ;
    std::cout << x << std::endl ;
    return 0;
}
Вот такой код игнорирует тоже ассерт... Ввожу пять - оно спокойно выводит мне её.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
21.07.2014, 13:40
Цитата Сообщение от Тамика Посмотреть сообщение
У меня он не компилируется ввиду неинициализации переменной х.
Уверены? Скорее всего у вас студия и скорее всего у вас не отключены соответствующие варнинги...
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
21.07.2014, 13:46  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Уверены? Скорее всего у вас студия и скорее всего у вас не отключены соответствующие варнинги...
Студия, да.
Запустила на линуксе - просто вывело ноль...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2014, 13:46
Помогаю со студенческими работами здесь

Передача данных в функцию
Добрый день , как реализовать такую идею? Обычно отправляют запрос data.writestring('SADsadas'); Http.httpmethod('GET','SITE')как...

Передача данных в функцию
Доброго времени суток подскажите как реализовать вот такое мне надо передать значения в функцию не как не могу решить эту задачу ...

Передача данных в функцию
Здравствуйте. У меня есть форма: &lt;body&gt; &lt;form name=&quot;addnewsform&quot; method=&quot;post&quot; action=&quot;&quot;&gt; &lt;p&gt; ...

Передача данных в функцию шорткода
Здравствуйте. Пишу плагин к wordpess'у. В плагине две функции. Первая: function one_print() { $subscribers =...

Передача данных из функции в функцию
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; float katet(float a, float b) { scanf(&quot;%f&quot;, &amp;a); ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru