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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:18     Ошибка с функцией #1
Выполняю пример из книги, раздел про функции. Одно из условий здачи написать функцию для ввода массива. У меня подчеркивет в 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++
что за ошибка с функцией POW C++
C++ Ошибка с функцией
C++ ошибка с функцией std::uninitialized_copy
C++ Ошибка с функцией
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.07.2012, 21:20     Ошибка с функцией #2
Массив нельзя вернуть из функции в качестве результата. Надо передавать массив как параметр функции и заполнять именно полученный массив.
Fooly
 Аватар для 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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
08.07.2012, 21:41  [ТС]     Ошибка с функцией #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
наверное прототип остался старым.
Угу, про прототипы пока забываю, заменил всё пошло =)
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.07.2012, 21:42     Ошибка с функцией #6
Цитата Сообщение от Fooly Посмотреть сообщение
только осталось решить вопрос про введение менее 10 чисел
Тогда стоит сделать, чтобы функция ввода возвращала количество введённых элементов.
Fooly
 Аватар для 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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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;
Правда если введено не число, то поток переходит в состояние ошибки, а введённые символы остаются в потоке. Так что с дальнейшим вводом будут проблемы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 22:13     Ошибка с функцией
Еще ссылки по теме:

Ошибка "чтение памяти невозможно" во время перехода к строке с функцией C++
C++ Ошибка при работе с функцией strlen
C++ Ошибка при вызове функции transform с функцией, в качестве аргумента

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

Или воспользуйтесь поиском по форуму:
Fooly
 Аватар для 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;
}
Yandex
Объявления
08.07.2012, 22:13     Ошибка с функцией
Ответ Создать тему
Опции темы

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