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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день, коллеги. Продолжаю решать задачки с целью подготовки к экзамену. Задачу про НОД решил попробовать двумя способами. И если первый вариант я подсмотрел теорию за .. какой то там класс, то второй - это, так сказать, мысли мои и не самые удачные, видимо. Короче .... при запуске второго варианта 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2021, 11:22
Ответы с готовыми решениями:

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

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

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

19
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.02.2021, 11:50
Цитата Сообщение от 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  [ТС]
.......... delitel (m,n,x-1, i+1);
}
return 0;
}
Вот так? но тогда ответ k=0 всегда.
Вообще то функция действительно работает, но ответ дает не верный. Например при вводе 1 и 2 ответ 6422240.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 13:46
Цитата Сообщение от 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
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.02.2021, 15:18
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  [ТС]
Спасибо за подсказку. Нашел еще одну логическую нестыковку, попробую добить до рабочего состояния)).

Добавлено через 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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:29
Цитата Сообщение от 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  [ТС]
Кстати, не рискнул выделить в отдельную тему. Подскажите где можно узнать о правильном написании кода, а то мне тут давеча намекнули, что мол пишу коряво)))

Добавлено через 2 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я ж тебе вроде показал, что нужно сделать
Я так делал... в результате всегда 0(ноль)
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.02.2021, 23:33
Больше пишите и больше читайте, вот и весь секрет.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:34
Цитата Сообщение от maytreya Посмотреть сообщение
Я так делал... в результате всегда 0(ноль)
Покажи, как делал
0
0 / 0 / 0
Регистрация: 05.02.2021
Сообщений: 28
21.02.2021, 23:36  [ТС]
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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:38
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи, как делал
78 строчка
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:40
Жирным пометил, на случай, если ты цвета не различаешь

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

Добавлено через 2 минуты
вот когда убираю "return 0; " тогда считает правильно, но опять предупреждение
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:46
Цитата Сообщение от 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  [ТС]
Весь код не передаю только концовку
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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2021, 23:51
Цитата Сообщение от maytreya Посмотреть сообщение
Весь код не передаю только концовку
return 0 в конце добавь и всё будет правильно.

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

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

Добавлено через 4 минуты
еще раз спасибо... все понял
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.02.2021, 00:06
Цитата Сообщение от maytreya Посмотреть сообщение
еще раз спасибо... все понял
Для спасибо есть специальная кнопка
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.02.2021, 00:06
Помогаю со студенческими работами здесь

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

Исправить баланс операторов Sub ... End Sub и Function ... End Function
Не могу понять в одной ошибке. Sub Hello() Private Sub Test(X As Single, Y As Single) If X &gt; -2 And Abs(Y) &lt; 1 And X +...

Ошибка при компиляции - Expected '(' before 'void'
Добрый день. Я компилирую библиотечные функции под арм. На данной функции возникает ошибка. Cpu.c __asm 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)"
Здраствуйте. У меня проблема такая, выдает ошибку ссылка на неразрешенный внешний символ, сам я в c++ диллетант, помогите, может в коде...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru