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

Ошибка при отладке программы - C++

Восстановить пароль Регистрация
 
Bravo48
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 17
20.12.2012, 20:38     Ошибка при отладке программы #1
Программа:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <math.h>
#include <locale>
void c511();
void c521();
void c5211();
int main() {
    int k;
    setlocale( LC_ALL,"Russian");
    std::cout<<"выберите лабораторную :" <<std::endl;
    std::cout<<"1 - C5.1.1" <<std::endl;
    std::cout<<"2 - C5.2.1" <<std::endl;
    std::cout<<"3 - C5.2.11" <<std::endl;
    std::cin >> k;
        if (k==1){c511();}
    if (k==2){c521();}
    if (k==3){c5211();}
}
void c511() {
using namespace std;
double x=2.35;
double a=0.89;
double b=2.065;
double y;
y=pow(x,(a+b));
std::cout <<"y= " << y << std::endl;}
void c521() {
using namespace std;
double x;
double y;
double z;
std::cout<<"vvedite x"<<std::endl;
std::cout<<"vvedite y"<<std::endl;
std::cin >> x;
std::cin >> y;
if(x>0){z=x-y;}
else {z=y-x+1;}
std::cout << "z= "<<y << std::endl;
std::cin >> x;
}
void c5211() {
using namespace std;
double a;
double b;
double c;
double d;
double kol = 4;
std::cout << "vvedite a"<<std::endl;
std::cin >> a;
std::cout << "vvedite b"<<std::endl;
std::cin >> b;
std::cout << "vvedite c"<<std::endl;
std::cin >> c;
std::cout << "vvedite d"<<std::endl;
std::cin >> d;
if(a <= 0) {--kol;}
if(b <= 0) {--kol;}
if(c <= 0) {--kol;}
if(d <= 0) {--kol;}
if(kol == 0) {return 0;}
double summ = 0;
if(a > 0) {summ += a;}
if(b > 0) {summ += b;}
if(c > 0) {summ += c;}
if(d > 0) {summ += d;}
 cout << summ / kol;
}
Лог:

1>------ Построение начато: проект: dv, Конфигурация: Debug Win32 ------
1>Построение начато 20.12.2012 20:13:28.
1>InitializeBuildStatus:
1> Обращение к "Debug\dv.unsuccessfulbuild".
1>ClCompile:
1> dv.cpp
1>c:\users\1\documents\visual studio 2010\projects\dv\dv\dv.cpp(57): error C2562: c5211: функция типа "void", возвращающая значение
1> c:\users\1\documents\visual studio 2010\projects\dv\dv\dv.cpp(6): см. объявление "c5211"
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.40
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

В последней подпрограмме при получении значения kol равным 0 программа должна возвращать к вводу значений a, b, c, d. Помогите, пожалуйста. Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 20:38     Ошибка при отладке программы
Посмотрите здесь:

При отладке выдается ошибка сегментации C++
одномерный массив помощь в отладке программы C++
Ошибка при отладке C++
C++ Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
C++ Ошибка при отладке
C++ Ошибка при отладке программы
Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
20.12.2012, 20:48     Ошибка при отладке программы #2
если функция описана как
void function_name()
это значит, она не может возвращать значений
чтобы она могла возвращать int, надо писать так:
int function_name()
Bravo48
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 17
20.12.2012, 21:05  [ТС]     Ошибка при отладке программы #3
Спасибо, исправил.
-=ЮрА=-
Заблокирован
Автор FAQ
20.12.2012, 21:15     Ошибка при отладке программы #4
Bravo48, запиши свой код вот так
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <cmath>
using namespace std;
void c511();
void c521();
void c5211();
int main() 
{
    int k;
    bool bContinue = true;
    while(bContinue)
    {
        cout<<"***MENU***" <<endl;
        cout<<"0 - exit" <<endl;
        cout<<"1 - C5.1.1" <<endl;
        cout<<"2 - C5.2.1" <<endl;
        cout<<"3 - C5.2.11" <<endl;
        cin>> k;
        switch(k)
        {
            case 0:bContinue = false;break;
            case 1:c511();break;
            case 2:c521();break;
            case 3:c5211();break;
            default:
                cout<<"Unsupported key"<<endl;
                break;
        }
    }
    return 0;
}
 
void c511() 
{
 
    double x=2.35;
    double a=0.89;
    double b=2.065;
    double y;
    y=pow(x,(a+b));
    cout <<"y= " << y << endl;
}
void c521() 
{
 
    double x;
    double y;
    double z;
    cout<<"vvedite x"<<endl;
    cout<<"vvedite y"<<endl;
    cin>> x;
    cin>> y;
    if(x>0)
        z=x-y;
    else 
        z=y-x+1;
    cout << "z= "<<y << endl;
    cin>> x;
}
void c5211() 
{
    double a;
    double b;
    double c;
    double d;
    double summ;
    double kol = 4;
    cout << "vvedite a"<<endl;
    cin>> a;
    cout << "vvedite b"<<endl;
    cin>> b;
    cout << "vvedite c"<<endl;
    cin>> c;
    cout << "vvedite d"<<endl;
    cin>> d;
    if(a <= 0) kol--;
    if(b <= 0) kol--;
    if(c <= 0) kol--;
    if(d <= 0) kol--;
    if(kol != 0) 
    {
        summ = 0;
        if(a > 0) 
            summ += a;
        if(b > 0) 
            summ += b;
        if(c > 0) 
            summ += c;
        if(d > 0) 
            summ += d;
        cout << summ / kol;
    }
}
То что мэйн не возвращал нолик для совеменных скорее правило (они дефалтом return 0 ставят) нежели ошибка.
Миниатюры
Ошибка при отладке программы  
-=ЮрА=-
Заблокирован
Автор FAQ
20.12.2012, 21:19     Ошибка при отладке программы #5
Цитата Сообщение от Bravo48 Посмотреть сообщение
--kol;
- не даёт никакой выгоды
std::cout тоже самое, хотя люди упёрто верят что это некоторые атрибуты магии. Пределагаю прочесть
http://www.cyberforum.ru/blogs/34326/blog275.html на счёт using namespace std;

Добавлено через 2 минуты
сами же ошибки в коде были здесь
http://codepad.org/Kxo3fXMR
In function 'void c5211()':
Line 60: error: return-statement with a value, in function returning 'void'
compilation terminated due to -Wfatal-errors.
Цитата Сообщение от Bravo48 Посмотреть сообщение
if(kol == 0) {return 0;}
- функция имеет тип void какой return 0?
Уже тогда просто return;
(прошу заметить что на отсутсвие return 0; c11 компилятор даже не ругается
отстусвие return 0 в main
)
Bravo48
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 17
20.12.2012, 22:03  [ТС]     Ошибка при отладке программы #6
C++
1
2
3
4
5
6
7
8
void c531a(){
    int S=128;
    int i;
for (i=3;i<=6;i++){
    if(i%3 = 0) 
        S=S-3; }
std::cout<< "S= "<< S <<std::endl;
}
Условие было записано псевдокодом:
S := 128
нц для i = 3 до 6
если mod(i, 3) = 0, то
S := S – 3
всё
кц i
Вот напейсал еще одну подпрограмму, при отладке ругается, что i должен быть изменяемым левосторонним значением. Честно, даже вникать сейчас не хочу, что это значит. Просто, прошу, исправьте, где ошибся.
-=ЮрА=-
Заблокирован
Автор FAQ
20.12.2012, 22:25     Ошибка при отладке программы #7
Цитата Сообщение от Bravo48 Посмотреть сообщение
if(i%3 = 0)
это присваивание а надо if(i%3 == 0)
-=ЮрА=-
Заблокирован
Автор FAQ
20.12.2012, 22:27     Ошибка при отладке программы #8
Bravo48, вот код с 4-м пунктом
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <cmath>
using namespace std;
void c511();
void c521();
void c5211();
void c531a();
int main() 
{
    int k;
    bool bContinue = true;
    while(bContinue)
    {
        cout<<"***MENU***" <<endl;
        cout<<"0 - exit" <<endl;
        cout<<"1 - C5.1.1" <<endl;
        cout<<"2 - C5.2.1" <<endl;
        cout<<"3 - C5.2.11" <<endl;
        cout<<"4 - C5.3.1a"<<endl;
        cin>> k;
        switch(k)
        {
            case 0:bContinue = false;break;
            case 1:c511();break;
            case 2:c521();break;
            case 3:c5211();break;
            case 4:c531a();break;
            default:
                cout<<"Unsupported key"<<endl;
                break;
        }
    }
    return 0;
}
 
void c511() 
{
 
    double x=2.35;
    double a=0.89;
    double b=2.065;
    double y;
    y=pow(x,(a+b));
    cout <<"y= " << y << endl;
}
void c521() 
{
 
    double x;
    double y;
    double z;
    cout<<"vvedite x"<<endl;
    cout<<"vvedite y"<<endl;
    cin>> x;
    cin>> y;
    if(x>0)
        z=x-y;
    else 
        z=y-x+1;
    cout << "z= "<<y << endl;
    cin>> x;
}
void c5211() 
{
    double a;
    double b;
    double c;
    double d;
    double summ;
    double kol = 4;
    cout << "vvedite a"<<endl;
    cin>> a;
    cout << "vvedite b"<<endl;
    cin>> b;
    cout << "vvedite c"<<endl;
    cin>> c;
    cout << "vvedite d"<<endl;
    cin>> d;
    if(a <= 0) kol--;
    if(b <= 0) kol--;
    if(c <= 0) kol--;
    if(d <= 0) kol--;
    if(kol != 0) 
    {
        summ = 0;
        if(a > 0) 
            summ += a;
        if(b > 0) 
            summ += b;
        if(c > 0) 
            summ += c;
        if(d > 0) 
            summ += d;
        cout << summ / kol;
    }
}
 
void c531a()
{
    int S=128;
    for (int i=3;i<=6;i++)
    {
        if(i%3 == 0) 
         S = S -3; 
    }
    cout<< "S= "<< S <<endl;
}
Миниатюры
Ошибка при отладке программы  
Bravo48
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 17
20.12.2012, 22:40  [ТС]     Ошибка при отладке программы #9
О, прошу, вы так накручиваете сложность, мне же не поверят, когда буду сдавать эту лабораторную Спасибо большое, просто я всего неделю занимаюсь Си, еще многого не знаю. Спасибо за помощь!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2012, 22:45     Ошибка при отладке программы
Еще ссылки по теме:

При отладке программы вылетает окошко с ошибкой: использование переменной без инициализации C++
Удаление экземпляра класса в функции самого класса (Ошибка при отладке) C++
Студия зависает намертво при отладке C++
при отладке программы возникает ошибка C++
C++ Ошибка при выходе из программы, а в отладке с самого начала её нет

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
20.12.2012, 22:45     Ошибка при отладке программы
  #10

Не по теме:

Цитата Сообщение от Bravo48 Посмотреть сообщение
О, прошу, вы так накручиваете сложность, мне же не поверят, когда буду сдавать эту лабораторную
- дык я всего то меню ввёл, верней обвернул код выбора
Цитата Сообщение от Bravo48 Посмотреть сообщение
std::cout<<"выберите лабораторную :" <<std::endl;
* * std::cout<<"1 - C5.1.1" <<std::endl;
* * std::cout<<"2 - C5.2.1" <<std::endl;
* * std::cout<<"3 - C5.2.11" <<std::endl;
* * std::cin >> k;
* * * * if (k==1){c511();}
* * if (k==2){c521();}
* * if (k==3){c5211();}
циклом
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(bContinue)
* * {
* * * * cout<<"***MENU***" <<endl;
* * * * cout<<"0 - exit" <<endl;
* * * * cout<<"1 - C5.1.1" <<endl;
* * * * cout<<"2 - C5.2.1" <<endl;
* * * * cout<<"3 - C5.2.11" <<endl;
* * * * cout<<"4 - C5.3.1a"<<endl;
* * * * cin>> k;
* * * * switch(k)
* * * * {
* * * * * * case 0:bContinue = false;break;
* * * * * * case 1:c511();break;
* * * * * * case 2:c521();break;
* * * * * * case 3:c5211();break;
* * * * * * case 4:c531a();break;
* * * * * * default:
* * * * * * * * cout<<"Unsupported key"<<endl;
* * * * * * * * break;
* * * * }

и заменил if-ы на switch по ричине большей уместности. В остальном поубирал std:: и заменил єто всё одной единтсвенной строкой под инклудами
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
using namespace std;
вроди по мне как и не сложно

Успехов на защите!

Yandex
Объявления
20.12.2012, 22:45     Ошибка при отладке программы
Ответ Создать тему
Опции темы

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