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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 251
#1

Не работает оператор "else" - C++

09.07.2015, 19:20. Просмотров 667. Ответов 25
Метки нет (Все метки)

Добрый день, не работает "else" в функции main . В чём проблема?

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
#include <iostream>
using namespace std;
int K, W, a1, b1, a2, b2, a3, b3;
void check()
{
    if (b1 + b2 >= K)
    {
        if (a1 + a2 <= W)
        {
            cout << "YES" << endl;
        }
    }
    else if (b1 + b3 >= K)
    {
        if (a1 + a3 <= W)
        {
            cout << "YES" << endl;
        }
    }
    else if (b2 + b3 >= K)
    {
        if (a2 + a3 <= W)
        {
            cout << "YES" << endl;
        }
    }
    else if (b1 + b2 + b3 >= K)
    {
        if (a1 + a2 + a3 <= W)
        {
            cout << "YES" << endl;
        }
    }
}
void main()
{
    cin >> K >> W;
    cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
    if (b1 + b2 + b3 >= K)
    {
        check();
    }
    else
    {
        cout << "NO" << endl;
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2015, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает оператор "else" (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

C2678 бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ostream" - C++
Код: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;typeinfo&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; #include &lt;ostream&gt; ...

бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному - C++
бинарный &quot;++&quot;: &quot;Counter&quot; не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору #include &lt;iostream&gt; ...

Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Вот ошибка 1&gt;------ Построение начато: проект: ыпошряоям, Конфигурация: Debug Win32 ------ 1&gt; файл.cpp 1&gt;c:\users\hp\desktop\уроки...

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" - C++
Собственно, текст ошибки приведен в названии темы. Сам код: #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include...

Бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Подскажите, пожалуйста, как решить проблему. Хочу перегрузить оператор ввода, но никак не пойму, в чем дело #include&lt;iostream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 251
09.07.2015, 20:09  [ТС] #16
Цитата Сообщение от ValeryS Посмотреть сообщение
в результате YES не выведется, сразу на выход функции
Да, сразу на выход идёт, только почему, я так и не понял.

Добавлено через 46 секунд
Я думал, что после if должно выполняться else if

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if (b1 + b2 >= K)
    {
        if (a1 + a2 <= W)
        {
            cout << "YES" << endl;
        }
    }
    else if (b1 + b3 >= K)
    {
        if (a1 + a3 <= W)
        {
            cout << "YES" << endl;
        }
0
EugeneQ
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
09.07.2015, 20:11 #17
Цитата Сообщение от Melvil Посмотреть сообщение
Да, сразу на выход идёт, только почему, я так и не понял.
В main() cin.get в конце.

Цитата Сообщение от Melvil Посмотреть сообщение
Я думал, что после if должно выполняться else if
не должно
0
Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 251
09.07.2015, 20:12  [ТС] #18
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
В чем вообще задача ? Как зайти в else ?
Вот, но там уже чуть-чуть осталось
Кликните здесь для просмотра всего текста
Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая из них весит a1 килограмм и вмещает b1 человек, вторая весит a2 килограмм и вмещает b2 человек, третья весит a3 килограмм и вмещает b3 человек.

В классе Гены K человек. Выясните, может ли он выбрать палатки так, чтобы в них все могли поместиться. При этом учитывайте, что выбранные палатки должны суммарно весить не более W килограмм.

Входные данные

Первая строка входного файла INPUT.TXT содержит два целых числа: K и W (1 <= K <= 15, 1 <= W <= 30). Вторая строка содержит шесть целых чисел: a1, b1, a2, b2, a3, b3 (1 <= a1, a2, a3 <= 10, 1 <= b1, b2, b3 <= 15).

Выходные данные

В выходной файл OUTPUT.TXT выведите YES, если палатки указанным образом выбрать можно, и NO в противном случае.


Добавлено через 57 секунд
Как собственно сделать, чтобы все else if выполнялись ?
0
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,080
Завершенные тесты: 2
09.07.2015, 20:17 #19
Цитата Сообщение от Melvil Посмотреть сообщение
Как собственно сделать, чтобы все else if выполнялись ?
Замените else if на if. Тогда у вас будет проверять все условия.

Добавлено через 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
if (b1 + b2 >= K)
{
    if (a1 + a2 <= W)
    {
        cout << "YES" << endl;
    }
}
 
if (b1 + b3 >= K)
{
    if (a1 + a3 <= W)
    {
        cout << "YES" << endl;
    }
}
    
if (b2 + b3 >= K)
{
    if (a2 + a3 <= W)
    {
        cout << "YES" << endl;
    }
}
 
if (b1 + b2 + b3 >= K)
{
    if (a1 + a2 + a3 <= W)
    {
        cout << "YES" << endl;
    }
}
1
Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 251
09.07.2015, 20:18  [ТС] #20
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Вот так. Надеюсь я вас правильно понял.
Да, спасибо, я правда сделал немножко по-другому, но тесты не проходит, пойду создам тему.

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
#include <iostream>
using namespace std;
int K, W, a1, b1, a2, b2, a3, b3;
void check()
{
    if (b1 + b2 >= K && a1 + a2 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b3 >= K && a1 + a3 <= W)
    {
            cout << "YES" << endl;
            exit(0);
    }
    else if (b2 + b3 >= K && a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
    else if (b1 + b2 + b3 >= K && a1 + a2 + a3 <= W)
    {   
            cout << "YES" << endl;
            exit(0);
    }
}
int main()
{
    cin >> K >> W;
    cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
    if (b1 + b2 + b3 >= K)
    {
        check();
    }
        cout << "NO" << endl;
        return 0;
}
0
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,080
Завершенные тесты: 2
09.07.2015, 20:24 #21
Цитата Сообщение от Melvil Посмотреть сообщение
но тесты не проходит
Какие тесты ?
0
DrunkProgrammer
37 / 27 / 6
Регистрация: 09.06.2015
Сообщений: 100
10.07.2015, 06:55 #22
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Вообще-то они по умолчанию равны нулю.
Вообще не факт. Это очень сильно зависит от компилятора. И правила хорошего кода гласят: не должно быть неинициализированных переменных, не должно быть глобальных переменных, не должно быть дефайнов.
0
ValeryS
Модератор
6632 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
10.07.2015, 09:27 #23
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
Вообще не факт. Это очень сильно зависит от компилятора.
вообще то это факт
глобальные переменные обнуляются автоматически, загляни в стандарт
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
И правила хорошего кода гласят:
что нужно знать инструмент, которым работаешь
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
не должно быть неинициализированных переменных, не должно быть глобальных переменных, не должно быть дефайнов.
можно узнать откуда эти правила?
А то уж больно на религию смахивает
0
DrunkProgrammer
37 / 27 / 6
Регистрация: 09.06.2015
Сообщений: 100
10.07.2015, 11:15 #24
Цитата Сообщение от ValeryS Посмотреть сообщение
можно узнать откуда эти правила?
А то уж больно на религию смахивает
Скотт Мейерс. Эффективное использование С++. Правило 1.
0
proont
1 / 1 / 1
Регистрация: 15.11.2014
Сообщений: 79
10.07.2015, 12:22 #25
У вас все правильно работает. Если условие в main() выполнилось, то вызывается функция check(). Если в функции check() какое-то условие выполнилось, то на экран будет выведено YES и программа пойдет выполняться дальше, с того момента, где вызвана функция check(). If выполнилось, поэтому else не выполняется. Если же main() выполнилось условие, а в chek() ни одно из условий не выполнилось, то программа выполняется дальше с того момента, где вызвана функция check(). Опять If выполнилось, поэтому else не выполняется.
1
ValeryS
Модератор
6632 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
10.07.2015, 16:48 #26
и что так и написано
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
не должно быть дефайнов.
покажи пример как можно без дефайнов провести условную компиляцию
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
не должно быть глобальных переменных,
могу привести кучу примеров где глобальные переменные упрощают код
например многопоточное обращение к одной области данных
статическая переменная кстати, веет себя как глобальная
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
не должно быть неинициализированных переменных,
C++
1
2
int a;
cin>>a;
и накой здесь инициализация?
Цитата Сообщение от DrunkProgrammer Посмотреть сообщение
Скотт Мейерс. Эффективное использование С++. Правило 1.
вообще то указывают или полные выходные данные, или ссылку
и неплохо бы цитату привести
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2015, 16:48
Привет! Вот еще темы с ответами:

Оператор "если" не работает - C++
#include &lt;windows.h&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;locale.h&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое - C++
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; #include...

Исправить ошибку:error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Скажите пожалуйста, как исправить error C2678: бинарный &quot;&gt;&gt;&quot;: не найден оператор, принимающий левый операнд типа &quot;std::istream&quot; (или...

error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::basic_istream<_Elem,_Traits>" - C++
Нужно из файла скачать информацию в объект. Почему у меня не получается? #include &lt;vector&gt; #include &lt;string&gt; #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2015, 16:48
Ответ Создать тему
Опции темы

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