Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/190: Рейтинг темы: голосов - 190, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
1

Предупреждение при компиляции "control reaches end of non-void function"

21.02.2021, 11:22. Показов 39840. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, коллеги. Продолжаю решать задачки с целью подготовки к экзамену. Задачу про НОД решил попробовать двумя способами. И если первый вариант я подсмотрел теорию за .. какой то там класс, то второй - это, так сказать, мысли мои и не самые удачные, видимо. Короче .... при запуске второго варианта VS выдает " cpp:72:1: warning: control reaches end of non-void function [-Wreturn-type]
72 | } ". Ответ при этом не соответствует действительности. Помогите разобраться и набраться опыта. Спасибо.
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
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
 
//Задание 1   ***********************
//вариант 1
int nod(int n, int m);
//вариант 2
int delitel (int m, int n, int x, int i);
 
 
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
int main()
{
    
 
//*******************************************************
 
//Задание 1
 
  int a,b,k;
  int x=0;
  int i=0;
  cout<< "enter two numbers a and b: \n";
  cin>> a;
  cout<<endl;
  cin>> b;
 
  k=delitel(a,b,x,i);
 
        cout<<"the greatest divisor of the numbers a and b: ";
        cout<<k; 
        cout<<endl;
 
 
return 0;
}
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
 
//Задание 1   ***********************
 
int nod(int n, int m)
{
// Алгоритм Евклида
    if (n<m){
    swap(n,m);
    }
    if (m == 0) 
        return n; 
    else 
        return nod(m, n % m);   
}
 
 
//вариант 2
int delitel (int m, int n, int x, int i)
{
  // n=x+i; 
if (n>m)
swap (n,m);
if(x!=0)
{
  if (m%x==0 && n%x==0)
  {
  return x;
  }
delitel (m,n,x-1, i+1);
}
}
Добавлено через 3 минуты
Переменную i удалил не везде. Не обращайте внимание)).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2021, 11:22
Ответы с готовыми решениями:

Control reaches end of non-function
Это не ошибка, а предупреждение, компиляция проходит, но все же неприятно. Гуглил, но решения не...

"control may reach end of non-void function" Xcode
main.cpp:42:1: Control may reach end of non-void function Выдает такую ошибку, гуглил не помоглу,...

Ошибка компиляции "Non-void function does not return a value in all control paths"
Описать рекурсивную функцию Combin2(N, K) целого типа, находящую C(N, K) — число сочетаний из N...

Excel 2013 32-bit URLDownloadToFile пишет "Compile error: only comment may appear after End Sub End Function or End Prop
Добрый день! перепробовал все варианты и не вызывается функция URLDownloadToFile: пишет...

Исправить баланс операторов Sub ... End Sub и Function ... End Function
Не могу понять в одной ошибке. Sub Hello() Private Sub Test(X As Single, Y As Single) ...

19
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
21.02.2021, 11:50 2
Цитата Сообщение от maytreya Посмотреть сообщение
cpp:72:1: warning: control reaches end of non-void function [-Wreturn-type]
Ерунда. Предупреждение. Функция должна что-то возвращать. Поставь в строчку 71 return 0; Или
void delitel (int m, int n, int x, int i)

Добавлено через 2 минуты
На работу программы влияния оказывать не должно.
Хотя надо стремиться к "чистой" трансляции, без варнингов.
1
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 13:10  [ТС] 3
.......... delitel (m,n,x-1, i+1);
}
return 0;
}
Вот так? но тогда ответ k=0 всегда.
Вообще то функция действительно работает, но ответ дает не верный. Например при вводе 1 и 2 ответ 6422240.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 13:46 4
Цитата Сообщение от maytreya Посмотреть сообщение
Вот так? но тогда ответ k=0 всегда.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int delitel (int m, int n, int x, int i)
{
    // n=x+i; 
    if (n>m)
        swap (n,m);
 
    if(x!=0)
    {
        if (m%x==0 && n%x==0)
            return x;
 
 
        return delitel (m,n,x-1, i+1);
    }
    return 0;
}
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
21.02.2021, 15:18 5
maytreya, все мои замечания касается только твоего
Цитата Сообщение от maytreya Посмотреть сообщение
cpp:72:1: warning: control reaches end of non-void function [-Wreturn-type]
Про ответ ничего не знаю, это отдельно смотреть...
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:27  [ТС] 6
Спасибо за подсказку. Нашел еще одну логическую нестыковку, попробую добить до рабочего состояния)).

Добавлено через 3 часа 5 минут
Еще раз спасибо всем кто откликнулся... Второй вариант стал "рабочим"... считает верно правда от варнинга не избавился. Конечно 1-й вариант гораздо изящней, но для тренировки 2-й то же не плох. )) Кому интересно вот код:
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
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
 
//Задание 1   ***********************
//вариант 1
int nod(int n, int m);
//вариант 2
int delitel (int m, int n, int x);
 
 
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
int main()
{
    
 
//*******************************************************
 
//Задание 1
 
  int a,b,k,x;
  cout<< "enter two numbers a and b: \n";
  cin>> a;
  cout<<endl;
  cin>> b;
  //вариант 1
  //k=nod(a,b);
 
  //вариант 2
  if (b>a)
    x=a;
  else
    x=b; 
  k=delitel(a,b,x);
 
        cout<<"the greatest divisor of the numbers a and b: ";
        cout<<k; 
        cout<<endl;
 
 
return 0;
}
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
 
//Задание 1   ***********************
 //вариант 1
int nod(int n, int m)
{
// Алгоритм Евклида
    if (n<m){
    swap(n,m);
    }
    if (m == 0) 
        return n; 
    else 
        return nod(m, n % m);   
}
 
                      //считает верно, но постоянно выдает предупреждение. Не могу понять почему.
//вариант 2                    Untitled-1.cpp:71:1: warning: control reaches end of non-void function [-Wreturn-type]
                            // 71 | }
                            //    | ^
int delitel (int m, int n, int x)
{
if (n>m)
swap (n,m);
if(x!=0)
{
  if (m%x==0 && n%x==0)
  {
  return x;
  }
delitel (m,n,x-1);
}
}
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:29 7
Цитата Сообщение от maytreya Посмотреть сообщение
//считает верно, но постоянно выдает предупреждение. Не могу понять почему.
//вариант 2                    Untitled-1.cpp:71:1: warning: control reaches end of non-void function [-Wreturn-type]
                            // 71 | }
                            //    | ^
Я ж тебе вроде показал, что нужно сделать
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
int delitel (int m, int n, int x, int i)
{
    // n=x+i;
    if (n>m)
        swap (n,m);
if(x!=0)
    {
        if (m%x==0 && n%x==0)
            return x;
return delitel (m,n,x-1, i+1);
    }
    return 0;
}
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:33  [ТС] 8
Кстати, не рискнул выделить в отдельную тему. Подскажите где можно узнать о правильном написании кода, а то мне тут давеча намекнули, что мол пишу коряво)))

Добавлено через 2 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я ж тебе вроде показал, что нужно сделать
Я так делал... в результате всегда 0(ноль)
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
21.02.2021, 23:33 9
Больше пишите и больше читайте, вот и весь секрет.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:34 10
Цитата Сообщение от maytreya Посмотреть сообщение
Я так делал... в результате всегда 0(ноль)
Покажи, как делал
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:36  [ТС] 11
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
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
 
//Задание 1   ***********************
//вариант 1
int nod(int n, int m);
//вариант 2
int delitel (int m, int n, int x);
 
 
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
//mainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmainmain
int main()
{
    
 
//*******************************************************
 
//Задание 1
 
  int a,b,k,x;
  cout<< "enter two numbers a and b: \n";
  cin>> a;
  cout<<endl;
  cin>> b;
  //вариант 1
  //k=nod(a,b);
 
  //вариант 2
  if (b>a)
    x=a;
  else
    x=b; 
  k=delitel(a,b,x);
 
        cout<<"the greatest divisor of the numbers a and b: ";
        cout<<k; 
        cout<<endl;
 
 
return 0;
}
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
//out_main_out_main_out_main_out_main_out_main_out_main_out_main_out_main_
 
//Задание 1   ***********************
 //вариант 1
int nod(int n, int m)
{
// Алгоритм Евклида
    if (n<m){
    swap(n,m);
    }
    if (m == 0) 
        return n; 
    else 
        return nod(m, n % m);   
}
 
                      //считает верно, но постоянно выдает предупреждение. Не могу понять почему.
//вариант 2                    Untitled-1.cpp:71:1: warning: control reaches end of non-void function [-Wreturn-type]
                            // 71 | }
                            //    | ^
int delitel (int m, int n, int x)
{
if (n>m)
swap (n,m);
if(x!=0)
{
  if (m%x==0 && n%x==0)
  {
  return x;
  }
delitel (m,n,x-1);
}
return 0;
}
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:38 12
Цитата Сообщение от maytreya Посмотреть сообщение
if (m%x==0 && n%x==0)
  {
  return x;
  }
return delitel (m,n,x-1);
}
return 0;
}
Твоя проблема не в том, что ты коряво пишешь, а в том, что не слушаешь, то что тебе говорят. Корявый код - это следствие.
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:39  [ТС] 13
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи, как делал
78 строчка
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:40 14
Жирным пометил, на случай, если ты цвета не различаешь

Добавлено через 56 секунд
Цитата Сообщение от maytreya Посмотреть сообщение
78 строчка
return delitel (m,n,x-1) сделал?
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:44  [ТС] 15
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
return delitel (m,n,x-1) сделал?
да... опять ноль

Добавлено через 2 минуты
вот когда убираю "return 0; " тогда считает правильно, но опять предупреждение
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:46 16
Цитата Сообщение от maytreya Посмотреть сообщение
да... опять ноль
Да ладно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int delitel(int m, int n, int x)
{
    if (n>m)
        std::swap(n,m);
    
    if(x!=0)
    {
        if (m%x==0 && n%x==0)
        {
            return x;
        }
        return delitel(m,n,x-1);
    }
    return 0;
}
int main()
{
    std::cout << delitel(10, 20, 2) << std::endl;
}
Добавлено через 1 минуту
Цитата Сообщение от maytreya Посмотреть сообщение
вот когда убираю "return 0; " тогда считает правильно, но опять предупреждение
Ты лучше показывай как сделал, а то большие сомнения в твоих словах.
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:49  [ТС] 17
Весь код не передаю только концовку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int delitel (int m, int n, int x)
{
if (n>m)
swap (n,m);
if(x!=0)
{
  if (m%x==0 && n%x==0)
  {
  return x;
  }
return delitel (m,n,x-1);
}
 
}
Добавлено через 57 секунд
return 0; если на 13 строке, то ответ ноль
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:51 18
Цитата Сообщение от maytreya Посмотреть сообщение
Весь код не передаю только концовку
return 0 в конце добавь и всё будет правильно.

Добавлено через 23 секунды
Цитата Сообщение от maytreya Посмотреть сообщение
return 0; если на 13 строке, то ответ ноль
При каких параметрах?

Добавлено через 1 минуту
Сделай return 1. Это когда общего делителя нет
1
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
22.02.2021, 00:00  [ТС] 19
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сделай return 1. Это когда общего делителя нет
ух ты... получилось. теперь бы понять почему....Спасибо огромное ... буду разбираться)))

Добавлено через 4 минуты
еще раз спасибо... все понял
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.02.2021, 00:06 20
Цитата Сообщение от maytreya Посмотреть сообщение
еще раз спасибо... все понял
Для спасибо есть специальная кнопка
3
22.02.2021, 00:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2021, 00:06
Помогаю со студенческими работами здесь

Ошибка при компиляции - Expected '(' before 'void'
Добрый день. Я компилирую библиотечные функции под арм. На данной функции возникает ошибка....

Ошибка при компиляции Dev C++ 'typedef void* pthread_t'
Здравствуйте. Нужно установить программу D-ITG через Dev C++. Установил версию 5.10, открываю...

Error LNK2019: unresolved external symbol _glutSwapBuffers@0 referenced in function "void __cdecl Draw(void)"
Здраствуйте. У меня проблема такая, выдает ошибку ссылка на неразрешенный внешний символ, сам я в...

Ошибка при компиляции In function undefined reference
Добрый день Перевожу программу из Windows на Astra Linux и постепенно разгребаю ошибки и...

Ошибка при компиляции Function IMFEATURE has been removed
=bwlabel(L1,8); feats=imfeature(mitka,'Area',8); Areas=zeros(num); for i=1:num; ...

Предупреждение при компиляции
При компилирование выдается следующие предупреждения... Note: Some input files use unchecked or...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru