Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
1

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

08.07.2012, 21:18. Просмотров 4009. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 21:18
Ответы с готовыми решениями:

Ошибка с функцией
#include &lt;iostream&gt; using namespace std; int main() { int sum,n;...

Ошибка с функцией
Дан текст. Найти сумму имеющихся в нем чисел. Функция отдельно работает(в...

Непонятка с функцией(ошибка в коде)
Необходимо вычислить значения нескольких сумм с помощью функций в следующей...

Ошибка при работе с функцией
gets - обычная функция для ввода строки, strdel-удаляет из строки count...

Ошибка с библиотечной функцией pow
Я понимаю что все это можно сделать намного проще, но сейчас волнует почему...

8
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
08.07.2012, 21:20 2
Массив нельзя вернуть из функции в качестве результата. Надо передавать массив как параметр функции и заполнять именно полученный массив.
1
Fooly
21 / 17 / 4
Регистрация: 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;
}
0
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
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];
}
1
Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:41  [ТС] 5
Цитата Сообщение от grizlik78 Посмотреть сообщение
наверное прототип остался старым.
Угу, про прототипы пока забываю, заменил всё пошло =)
0
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
08.07.2012, 21:42 6
Цитата Сообщение от Fooly Посмотреть сообщение
только осталось решить вопрос про введение менее 10 чисел
Тогда стоит сделать, чтобы функция ввода возвращала количество введённых элементов.
1
Fooly
21 / 17 / 4
Регистрация: 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;
}
0
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
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;
Правда если введено не число, то поток переходит в состояние ошибки, а введённые символы остаются в потоке. Так что с дальнейшим вводом будут проблемы.
1
Fooly
21 / 17 / 4
Регистрация: 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;
}
0
08.07.2012, 22:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 22:13

что за ошибка с функцией POW
s=s+(pow(x,4*n+1)/4*n+1); что не так Добавлено через 1 минуту все...

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

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


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

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

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