Создание программы ИИ для проекта. Не могу заставить его распознавать ввод пользователя

Поэтому мне нужно создать программу ИИ, которая взаимодействует с пользователем и отвечает на основе пользовательского ввода. Я не очень опытен, и это уже заняло несколько часов, я посмотрел в Интернете, но решил, что на самом деле опубликую свой код и попытаюсь получить помощь/совет.

В основном ИИ помогает с математикой, у меня есть программа, представляющая себя и спрашивающая, с чем ей нужна помощь, но когда я ввожу сложение, вычитание и т. д., она просто отвечает числами, когда должна отвечать: «Отлично, я помогу вам со сложением!/ (независимо от ввода пользователя)"

Снимок экрана с первой запущенной программой: http://prntscr.com/elw7b4 Снимок экрана после ввода того, с чем пользователю нужна помощь: http://prntscr.com/elw7ky (очевидно, в данный момент это немного калькулятор прежде всего, поэтому он дает дополнительные результаты.

Калькулятор работал до ввода следующего кода: (Как вы можете видеть, http://prntscr.com/elwavs только две ссылки, потому что у них не более 10 повторений)

void Inpsum()
{

cout << "Hello, my name is Eva! I am able to help you with basic Maths! How may I be of Assistance today?" << endl;

float inpsum;

cin >> inpsum;

cout << "Great!, I will help you with " << (inpsum) << endl;
}

но ввод вышеуказанного кода сломал калькулятор.

вот полный код:

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <iomanip>

using namespace std;

//user inputs what he needs help with/program output
void Inpsum()
{
   cout << "Hello, my name is Eva! I am able to help you with basic Maths! How may I be of Assistance today?" << endl;

cin >> inpsum;
cout << "Great!, I will help you with " << (inpsum) << endl;
}

//addition function
void Add() {
float add1, add2;
cout << "Please enter two values you want added together" << endl;
cin >> add1;
cin >> add2;
cout << "The answer is: " << (add1 + add2) << endl;
}

//subtraction function
void Subt() {
float subt1, subt2;
cout << "Please enter two values you want subtracted" << endl;
cin >> subt1;
cin >> subt2;
cout << "The answer is: " << (subt1 - subt2) << endl;
}

//division function
void Div()
{
    float div1, div2;
    cout << "Please enter two values you want divided" << endl;
    cin >> div1;
    cin >> div2;
    cout << "The answer is: " << (div1 / div2) << endl;
}

//multiplication function
void Mult() {
float mult1, mult2;
cout << "Please enter two values you want multiplacted" << endl;
cin >> mult1;
cin >> mult2;
cout << "The answer is: " << (mult1 * mult2) << endl;
}



int main()
{
Inpsum(); //user inputs what they want help with
Add();
Subt();
Div();
Mult();

    return 0 ; 
}

В общем, я настроил калькулятор, и он заработал. Но при попытке реализовать ввод и вывод между пользователем и программой я ошибаюсь и все сломал. Вместо того, чтобы программа говорила «Отлично, я помогу вам с дополнением», она говорит: «Отлично, я помогу вам с -134567432».

Я не прошу никого делать это за меня, скорее укажите мне правильное направление, чтобы я действительно знал, что делать в будущем.


person csfl0    schedule 19.03.2017    source источник
comment
Вы действительно думаете, что это про ИИ?   -  person juanchopanza    schedule 19.03.2017
comment
Я понятия не имею, о чем это, поэтому я здесь. Мы все с чего-то начинаем, лол.   -  person csfl0    schedule 19.03.2017
comment
Stack Overflow — не лучшее место для начала. Это хорошее место, чтобы пойти после того, как вы закончили, и это все еще не работает. Мы не можем научить вас программировать здесь.   -  person user4581301    schedule 19.03.2017
comment
Комментарии от живых пользователей, которые знают, на что они смотрят, чтобы указать мне правильное направление, а не темы форума 8-летней давности, кажутся немного лучше, но точка зрения принята. Мой текущий код не работает, и я понятия не имею, почему, и поэтому подумал, что было бы неплохо спросить.   -  person csfl0    schedule 19.03.2017
comment
@csfl0 Вы можете начать с того, что немного подумаете об этом, но. Как вы думаете, проблема, с которой вы столкнулись, связана с тем, что вы пытаетесь закодировать какую-то задачу, связанную с ИИ, или, может быть, потому, что вы допустили ошибку C++? Какой из двух более вероятен?   -  person juanchopanza    schedule 19.03.2017


Ответы (2)


Обратите внимание, что вы определяете inpsum с помощью float inpsum;, но вы пытаетесь сохранить строку или слова. Они не совместимы. Вы можете узнать больше о типах данных и строках в C++.

person xhg    schedule 19.03.2017
comment
Лмао я дебил. Спасибо - person csfl0; 19.03.2017
comment
Я думаю, что ИИ не имеет отношения к вашему вопросу, возможно, в следующий раз вам нужно быть более конкретным, ура! - person xhg; 19.03.2017

Это может помочь использовать перечисление, поскольку у вас есть только несколько вариантов. Вы можете сделать что-то вроде этого:

enum class OPERATION : char {
    Addition       = 'A',
    Subtraction    = 'S',
    Division       = 'D',
    Multiplication = 'M'
};

Затем вместо этого вы переходите к строке и имеете следующее:

std::string input;
std::cin >> input;

switch(static_cast<OPERATION>(input[0])) {
    case OPERATION::Addition:
        Add();
        break;

    case OPERATION::Subtraction:
        Subt();
        break;

    case OPERATION::Division:
        Div();
        break;

    case OPERATION::Multiplication:
        Mult();
        break;

    default:
        std::cerr << "Invalid input" << std::endl;
        exit(1);

}

Определение перечисления позволит вам приводить к нему значения, соответствующие его значениям. Это позволяет вам безопасно выполнять переключение с определенными входными данными, которые вы ожидаете увидеть во время работы вашей программы.

person jajabarr    schedule 19.03.2017
comment
Спасибо за помощь и ваше время! - person csfl0; 19.03.2017
comment
Это очень конструктивное предложение, вам определенно стоит подумать об этом. - person xhg; 19.03.2017