4 / 4 / 2
Регистрация: 24.12.2017
Сообщений: 83
1

"Да" и "нет" в качестве величины переменной

24.12.2017, 23:28. Показов 5861. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасьте! Я - первокурсник факультета информационных технологий кафедры "Программная инженерия". На лабораторной работе дано такое задание: "Составить диалоговую программу с пользователем, имитирующую искусственный интеллект (тему диалога придумать самостоятельно). Программа должна задавать вопросы и реагировать в зависимости от ответов на них."

Дело вот в чём: я хотел бы сделать так, чтобы при вводе в качестве ответа на вопрос "да" или "нет" был результат. Сложность в том, что это не число, а текст, дак ещё и на русском.

Вот пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "ru");
    char x;
    cin >> x;
    if (x = 1)
    {
        cout << Да << endl;
    }
 
    else if (x = 2)
    {
        cout <<Нет << endl;
    }
 
    system("pause");
 
    return 0;
}
Нужно, чтобы вместо 1 и 2 были "да" и "нет". Как это сделать? И возможно ли это вообще?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2017, 23:28
Ответы с готовыми решениями:

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

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет
Выполните задания с использованием библиотечного класса string. Даны строка S. Необходимо после...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую классы: − воин;...

9
2761 / 1915 / 569
Регистрация: 05.06.2014
Сообщений: 5,571
25.12.2017, 07:57 2
1) x=1 x==1. Один знак равенства это присваивание, а не сравнение.
2)
C++
1
2
3
std::string x;
cin>>x;
if(x=="yes")
Но для русского придется скакать с бубном вокруг вечно криво совпадающих кодировок. Или переходить на Линукс, там консоль в utf-8.
0
68 / 56 / 14
Регистрация: 20.12.2013
Сообщений: 564
25.12.2017, 15:15 3
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
#include <iostream>
#include <string>
#include <functional>
#include <vector>
using namespace std;
 
class action
{
    std::string str;     //Ответ для формулировки действия
    void(*fun)(std::string ss);
public:
    action(void(*f)(std::string ss) = 0) : fun(f) {};
    void operator()(std::string s){ str = s; fun(str); return; };
};
 
void draw(std::string s)
{
    std::cout << "Do something." << '\n' << '\n';
    std::cout << "Finish." << '\n' << '\n';
};
 
void check_age(std::string ss)
{
    char ch=0;
    atoi(ss.c_str()) > 18 ? (std::cout << "You are welcome." << '\n' << '\n', ch=0) : (std::cout << "You are too young. See you later. Enter any symbol." << '\n' << '\n', std::cin>>ch, exit(0), ch=0);
};
 
vector<pair<std::string, action*>> ans;  //сохраняется пара<вопрос, действие>
std::string str2, cur_str;
char buf[200];
 
int main() {
 
    setlocale(LC_CTYPE, "rus");
 
    //Ввод исходных данных
    ans.push_back(make_pair<std::string, action*>("Where are you from? (Russia(r), Italy(i), Other(any symbol))", new action([](std::string ss) {
        switch (ss[0])
        {
         case 'r': std::cout << "Для ввода используйте только английский язык." << '\n' << '\n'; break;
         case 'i': std::cout << "Solo lingua inglese viene usata." << '\n' << '\n'; break;
         default: std::cout << "Use only english language for input." << '\n' << '\n'; 
        } ;  })));
    ans.push_back(make_pair<std::string, action*>("How old are you?", new action(check_age)));
    ans.push_back(make_pair<std::string, action*>("To be (y) , or not to be (n) ?", new action([](std::string ss) { ss == std::string{ "y" } ? std::cout << "Ok." << '\n' << '\n' : std::cout << "The answer is wrong." << '\n' << '\n'; })));
    ans.push_back(make_pair<std::string, action*>("Some more sophisticated question.", new action(draw)));
 
    //...
    //Диалог
    cout << "Hello." << '\n';
    for (auto vaL : ans)
    {
        std::cout << vaL.first<<'\t';
        std::cin>>str2;
        (*vaL.second)(str2);
        delete vaL.second;
    };
 
    char ch;
    cin >> ch;
}
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
25.12.2017, 15:55 4
Tyler_Fox, Для русского языка вначале функции main напиши
C++
1
2
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
Потом хоть вводи,хоть выводи русские буквы
0
4 / 4 / 2
Регистрация: 24.12.2017
Сообщений: 83
25.12.2017, 17:19  [ТС] 5
Gaveyn, я использую для хранения строки символов класс std::string. Программа реагирует на ввод слова "da" и "net", но пока только на английском. Для завершения картины не хватает этих "СэтКонсоль" строк. Не напишете поподробней, куда именно надо вставлять эти две строки?
0
68 / 56 / 14
Регистрация: 20.12.2013
Сообщений: 564
25.12.2017, 17:45 6
Возможно в билдере проблем с русскими буквами не будет - там используются юникодовские строки. Но проверить не могу: установил бесплатную VS для использования последнего стандарта, в результате билдер не запускается.
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
26.12.2017, 20:09 7
Tyler_Fox,
Приведу пример

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <windows.h> //обязательно для SetConsole
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string answer;
    cout<<"*Вот тут задается вопрос*: " ;
    cin>> answer;
    if(answer=="Да"||answer=="да"||answer=="ДА")
    cout<<"Вы ответили да "<<endl; // Тут вывод если ответ был "да"
    else if(answer=="Нет"||answer=="нет"||answer=="НЕТ")
    cout<<"Вы ответили нет "<<endl; // Тут ответ для "нет"
    else cout<<"Я не понял что вы ответили "<<endl; // тут для всех отсальных случаев
    return 0;
 
}
На первом скрине без SetConsole,на втором с ним
Миниатюры
"Да" и "нет" в качестве величины переменной   "Да" и "нет" в качестве величины переменной  
1
4 / 4 / 2
Регистрация: 24.12.2017
Сообщений: 83
26.12.2017, 20:25  [ТС] 8
Gaveyn, благодарю!
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
28.12.2017, 12:24 9
Tyler_Fox, Ткни "спасибо"
1
0 / 0 / 0
Регистрация: 16.12.2019
Сообщений: 1
16.12.2019, 12:33 10
Спасибо, очень помогло!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2019, 12:33
Помогаю со студенческими работами здесь

Составить программу,которая выведет "Да","Нет","на границе"
Вот фотки графика и задание,заранее спасибо

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru