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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
#1

Ошибка с функцией - C++

08.07.2012, 21:18. Просмотров 2809. Ответов 8
Метки нет (Все метки)

Выполняю пример из книги, раздел про функции. Одно из условий здачи написать функцию для ввода массива. У меня подчеркивет в main() функцию vvod() и пишет "для агрегатного объекта требуется инициализация с использованием {...}".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
const int size = 10;
int vvod();
 
int main()
{using namespace std;
int mas[] = vvod();
}
 
int vvod()
{
    int golf[size];
    for (int i=0; i<size; i++)
        std::cin >> golf[i];
    return golf[size];
}
Добавлено через 13 минут
Вот условие задачи: Напишите программу, которая запрашивает у пользователя 10 результатов игры в гольф, сохраняя их в массиве. При этом необходимо обеспечить возможность прерывания ввода до ввода всех 10 результатов. Программа должна отобразить все результаты в одной строке и сообщить среднее их значение. Реализуйте ввод, отображение и вычиссление среднего в трех отдельных функциях, работающих с массивами.

Пока ещё не сделал про ввод менее 10 значений, но общий код написал, и с вышеуказанной ошиюкой всё ещё траблы

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
#include <iostream>
const int size = 10;
int vvod();
void vivod (int hoop[], int n);
double sr (int hoop[], int n);
int main()
{using namespace std;
int mas[] = vvod();
vivod(mas, size);
double p = sr(mas, size);
for (int i =0; i<100; i++)
    cin.get();
return 0;
}
 
int vvod()
{
    int golf[size];
    for (int i=0; i<size; i++)
        std::cin >> golf[i];
    return golf[size];
}
void vivod (int hoop[], int n)
{
    for (int i=0; i<n; i++)
        std::cout << hoop[i] << " ";
}
double sr (int hoop[], int n)
{
    int total=0;
    int k=0;
    for (int i=0; i<n; i++)
        {total +=hoop[i];
         k+=1;
        }
    double sred = total/k;
    return sred;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка с функцией (C++):

Ошибка с функцией - C++
#include &lt;iostream&gt; using namespace std; int main() { int sum,n; cin&gt;&gt;n; cout&lt;&lt;fun(sum); }

Ошибка с функцией - C++
Дан текст. Найти сумму имеющихся в нем чисел. Функция отдельно работает(в качестве отдельной программы). Сама программа без функции тоже....

что за ошибка с функцией POW - C++
s=s+(pow(x,4*n+1)/4*n+1); что не так Добавлено через 1 минуту все ясно,надо было цифры как double,или float объявлять

Непонятка с функцией(ошибка в коде) - C++
Необходимо вычислить значения нескольких сумм с помощью функций в следующей функции: y=a+4*sum J=2, N+1(3*J^2+J+2)/4+3*sum J=1,N(2*J+3);J...

Ошибка в коде с функцией strcmp - C++
строка с функцией strcmp не работает,пробовал делать элементы структуры char,но все равно говорит что не может преобразовать из char в ...

Ошибка с функцией std::uninitialized_copy - C++
Ребята у меня есть большой код, в котором используется класс std::Allocator&lt;T&gt;. Всё вроде хорошо, но выдает: error C4996:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.07.2012, 21:20 #2
Массив нельзя вернуть из функции в качестве результата. Надо передавать массив как параметр функции и заполнять именно полученный массив.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:30  [ТС] #3
Ой всё разобрался, только осталось решить вопрос про введение менее 10 чисел

вот что вышло
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
#include <iostream>
const int size = 10;
void vvod(int golf[], int size);
void vivod (int hoop[], int n);
double sr (int hoop[], int n);
int main()
{using namespace std;
setlocale (LC_ALL, "Russian");
int mas[size];
vvod(mas, size);
vivod(mas, size);
double p = sr(mas, size);
for (int i =0; i<100; i++)
    cin.get();
return 0;
}
 
void vvod(int golf[], int size)
{
    for (int i=0; i<size; i++)
    {   std::cout << "\nВведите значение: ";
        std::cin >> golf[i];
    }
}
void vivod (int hoop[], int n)
{
    for (int i=0; i<n; i++)
        std::cout << hoop[i] << " ";
}
double sr (int hoop[], int n)
{
    int total=0;
    int k=0;
    for (int i=0; i<n; i++)
        {total +=hoop[i];
         k+=1;
        }
    double sred = total/k;
    return sred;
}
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.07.2012, 21:32 #4
наверное прототип остался старым.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
void vvod(int golf[], int size);
 
int main()
{
    const int size = 10;
    int mas[size];
    vvod(mas, size);
 
    return 0;
}
 
void vvod(int golf[], int size)
{
    for (int i=0; i<size; i++)
        std::cin >> golf[i];
}
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:41  [ТС] #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
наверное прототип остался старым.
Угу, про прототипы пока забываю, заменил всё пошло =)
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.07.2012, 21:42 #6
Цитата Сообщение от Fooly Посмотреть сообщение
только осталось решить вопрос про введение менее 10 чисел
Тогда стоит сделать, чтобы функция ввода возвращала количество введённых элементов.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:54  [ТС] #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Тогда стоит сделать, чтобы функция ввода возвращала количество введённых элементов.
Угу, я сам это понял =) Вот только забыл как организовать ввод корректно, походу элементам массива какую-то лабуду присваиваю, ща буду рыться в начальных главах вспоминать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int vvod(int golf[], int size)
{
    int l=0;
    char ch;
    for (int i=0; i<size; i++)
    {   
        std::cout << "Введите значение: ";
        std::cin.get(ch);
        if (ch != 'q')
        {golf[i]==ch;
        l +=1;
        std::cin.get(ch);}
        else
            break;
    }
    return l;
}
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.07.2012, 22:03 #8
Цитата Сообщение от Fooly Посмотреть сообщение
C++
1
golf[i]==ch;
Ну, начать можно с того, что это не присваивание, а сравнение. А в данном простом случае я бы сделал ввод до первого отрицательного, или до первого не числа.
C++
1
2
3
4
    int i = 0;
    while (i < size && cin >> golf[i] && golf[i] >= 0)
        ++i;
    return i;
Правда если введено не число, то поток переходит в состояние ошибки, а введённые символы остаются в потоке. Так что с дальнейшим вводом будут проблемы.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 22:13  [ТС] #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну, начать можно с того, что это не присваивание, а сравнение. А в данном простом случае я бы сделал ввод до первого отрицательного, или до первого не числа.
C++
1
2
3
4
    int i = 0;
    while (i < size && cin >> golf[i] && golf[i] >= 0)
        ++i;
    return i;
Правда если введено не число, то поток переходит в состояние ошибки, а введённые символы остаются в потоке. Так что с дальнейшим вводом будут проблемы.
Я тоже сильно не стал замарачиваться и сделал выход не через буквы, а через отрицательное число, правда у меня вышло более громаздко =) Спасибо за помощь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int vvod(int golf[], int size)
{
    using namespace std;
    int l=0;
    int ch;
    for (int i=0; i<size; i++)
    {   
        cout << "Введите значение: ";
        cin>>ch;
        if (ch >=0)
        {
        golf[i]=ch;
        l +=1;
        }
        else
            break;
    }
    return l;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 22:13
Привет! Вот еще темы с ответами:

Ошибка с библиотечной функцией pow - C++
Я понимаю что все это можно сделать намного проще, но сейчас волнует почему показывает ошибки в pow, что не так? int main() { int...

Ошибка с лямбдой в арг., а с функцией компилируется - C++
Объясните, если не затруднит. Есть функция с одним параметром string (set.find(val)), если в роли аргумента другая функция с...

Ошибка при работе с функцией strlen - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main(){ string a; int i,j; cout&lt;&lt;&quot;Vvedite stroky \n&quot;;...

Ошибка при вызове функции transform с функцией, в качестве аргумента - C++
Здравствуйте! Хочу перевести строку в нижний\верхний регистр, используя готовые алгоритмы. Пишу так: transform(str1.begin(),...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.07.2012, 22:13
Ответ Создать тему
Опции темы

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