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

If и Else

17.06.2013, 20:21. Показов 1933. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил "поиграться" с этими двумя операторами, в итоге должна была выйти программка - вопросник, сначала у меня не получился этот вопрос, теперь вышло, но несколько не так. При выборе D должно было писаться Perfect!, а пишется Bad... very bad... , но при этом, если выбрать любой другой вариант - пишется Perfect! Не подскажите, как это исправить? Код ниже:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <windows.h>
 using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    
    char s;
    char d;
    char y;
    char x;
 
    cout << "Какая земля по форме? S = Круглая, D = Сфера, Y = Плоская, X = Что такое земля?" << endl;
    if (cin >> d)
        cout <<"Perfect!" << endl;
    if (cin >> s || cin >> y || cin >> x) 
        cout << "Bad... very bad..." << endl;
 
 
}
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
18.06.2013, 19:50  [ТС] 21
Author24 — интернет-сервис помощи студентам
Wolkodav, как Вы уже, наверное, заметили, я хочу написать небольшой текстовый квест - игру. Т.к. я не обладаю навыками работы c 3D моделированием и PS, то ограничусь пока этим. Так вот, предположительно - сюжет не линейный. А значит игроку должен быть дан выбор. Игра не в два действия, и поэтому обидно будет, если ее прохождение займет более часа-двух, нужна возможность сохранения. Вот я и задал вопрос, как можно сохранять в определенный момент или же давать право игроку выбирать момент сохранения, к примеру написав посреди игры save.
Так же, то что про Землю скидывал программку - это как раз для примера мне, как делать, чтобы при выборе чего-либо не было выхода из программы, например кто-то попросил игрока доставить что-то куда-то, игроку в лом, и он отказался - на этом у меня обычно выходило из программы,да и при этом, хоть да, хоть нет пиши - было такое, что фразы выскакивали обе, в любом случае. Пока что более вопросов вроде нет))
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 20:00 22
Не goto тут не покатит, как вы программно поставите метку на том месте где сохранились? Тут лучше после каждой миссии или еще чего спрашивать, не хочет ли игрок сохранится, и записывать там номер миссии или чего в файл, а потом при загрузке игры, загружать и значение файла. Для каждой миссии написать функцию, и в switch-case при загрузке выбирать номер нужной миссии. Идея примерно понятна?
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
18.06.2013, 20:12  [ТС] 23
Да... ко мне уже приходила идея писать в файл и считывать все с файла при запуске, если я правильно понял, то нужно будет, чтобы была проверка в самом начале кода. Switch - если я не ошибаюсь, позволяет при разных значениях выводить разные решения, для каждого значения - свое решение, только вот switch-case я не знаю что это, и тем более не знаю синтаксиса. Написать функцию - дело хорошее, а как эта функция будет выглядить?)) Если уж не захотите писать ее, может быть расскажите о ней?)) Пожалуйста)
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 20:18 24
switch-case - вас отсылаю к гуглу.
А так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//бла-бла 
void Mission1()
{
}
 
void Mission2()
{
}
// и т.д.
 
int main()
{
//бла-бла-бла
switch(/* тут что-то*/)
{
case 1: Mission1();break;
case 2: Mission2();break;
//и т.д
}
return 0;
}
Вот такая примерно схема. А в Mission, я не знаю как у вас там игра будет. Просто описывается действие которые происходит в данной функции.
1
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
18.06.2013, 20:20  [ТС] 25
Спасибо
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 20:22 26
Corax111, по хорошему, надо еще создавать много файловый проект, с заголовочными файлами и т.д.
0
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
18.06.2013, 21:46 27
я имел ввиду делать примерно так:
при загрузке сохранёнки загружается из файла номер метки например 10
(обзавём эту переменную int met)
met=10
и кидаем по goto на нужную метку
C++
1
2
3
4
5
6
7
switch(met)
{
case 1: goto метка1;break;
...
case 10: goto метка10;break;
...
}
а сама игра будет выглядеть как огромная куча if-ов
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
if(yes/no)
{
met=1;
метка1:
задаём опять вопрос
     if(yes/no)
     {
       met=3;
       метка4:
       задаём опять вопрос
       ....
           // много if-ов спустя //
           if(yes/no)
           {
           met=10;
           метка10:
           задаём опять вопрос   //и мы продолжаем играть с того момента, где сохранились в последний раз
           ...
           }
      }
      else
      {
       met=4;
       метка4:
       задаём опять вопрос
       ...
      }
}
else
{
met=2;
метка2:
задаём опять вопрос
...
}
получается,что когда мы сохраним нашу met и загрузим её, то мы перейдём на тот вопрос на котором сохранились
дерзайте
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 21:50 28
case лучше кучи if это факт, а если есть номер у вопроса, то можно по case перейти к тому вопросу, который нужен.
0
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
18.06.2013, 21:55 29
Если как вы предлагаете через switch и case, то их тоже будет не меньше чем if-ов (через switch вариантов ответов можно больше поставить), и тогда в каждой Mission будут ещё свечи, которые будут вызывать новые Mission и т.д. и т.п. ...
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 21:57 30
а много-много if в одном main лучше по вашему? Плюс метки?
0
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
18.06.2013, 22:05 31
через метки для начинающих проще а if-ы можно заменить на switch, т.к. вариантов ответов можно больше поставить

Добавлено через 3 минуты
да и по метке в п/п не перейдёшь, поэтому как ни печально всё в одном main будет
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 22:18 32
Зато можно передать в функцию условие, и перейти в функции по case) А goto в С++ делать нечего, даже начинающим)
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
18.06.2013, 22:52  [ТС] 33
Wolkodav, я прекрасно понимаю, что многофайловый проект создать - это хорошо, по-хорошему и иллюстрации какие-то можно было бы вставить, и сделать полноценную игрушку, проблема лишь в том, что я не имею ни малейшего понятия, как делать многофайловый проект, точнее не знаю, как все файлы связать друг с другом) Я прекрасно понимаю, любой догадается, что огромный минус - писать всю программу\сайт в одном файле. Тяжело для восприятия, возможно дольше грузится... огромное количество переменных объявлять надо для каждой подпрограммы, и может быть для новых уровней... Может напишите гайд, как это делать, если вам не сложно?))
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 23:04 34
У вас IDE какая?

Добавлено через 11 минут
Эмм, вопрос наверное не понят. Где пишите? MS Visual Studia?
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
18.06.2013, 23:16  [ТС] 35
Да, MS Visual Studio 10 Professional

Добавлено через 13 секунд
Уточнил, т.к. не знаю, есть ли между ними разница)
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 23:23 36
Corax111, давайте попробую)
0
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
19.06.2013, 09:58  [ТС] 37
Вот вопрос, почему пишет, что перед ) не хватает ; , и недопустимый else без парного if, компилятор ослеп? Я уже даже 2 if написал, и все равно(
И хотелось еще спросить, в чем разница между release и debug?))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i = 10;
int c = 3;
char f;
 
for ( i > c)
    c = c+2;
if (c == i)
    i = ++i;
cout << c << endl;
else    
    cout << i << c << endl;
if ( i != 25)
    i = +3;
cout << i << endl;
0
100 / 87 / 17
Регистрация: 29.05.2013
Сообщений: 227
19.06.2013, 10:18 38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int i = 10;
int c = 3;
char f;
 
for ( i > c)
    c = c+2;
if (c == i)
{
    i = ++i;
cout << c << endl;
}
else    
    cout << i << c << endl;
if ( i != 25)
    i = +3;
cout << i << endl;
после операндов if else for while выполняется только один следующий оператор для того, чтоб выполнялось несколько необходимо объединять их в {}

Добавлено через 4 минуты
и ещё (не заметил) for ( i > c) так нельзя for(i=0;i>c;i++) необходимо 3 значения в for(стартовое значение переменной;когда выходим из цикла?;что делаем с какой-либо переменной после каждого прохода по циклу)
1
19.06.2013, 10:18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru