×Закрыть

Помогите с программой на C++

Здравствуйте. Я начинающий программист. Решил сделать игру-чат в консоли. У меня появилась проблема. После ответа на второй вопрос программа сама отвечает на оставшиеся вопросы и заканчивается. Не могу понять в чём дело.

#include "stdafx.h"
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;

int a,a2,a3,a4, b, f2;
string name, name2, name3;
char f,f3;

void error() {
	cout << "Вы ввели неправильное значение!!!" << endl;
}
void instruction() {
	cout << "1)Не искать ответы в интернете."<< endl;
	cout << "2)Если ответ Да то введи y(лат. букву); если Нет - n(лат. букву)"  << endl;
}

int main()
{
	setlocale(LC_ALL, "Russian");
	
	b = 0;
	cout << "Здравствуй. Введи своё имя." << endl;
	cin >> name;
	cout << "Может сыграем в одну игру?" << endl;
	cout << "Я буду тебя спрашивать, а ты должен отвечать."<<endl;
	cout << "Если ты ответишь правильно больше чем на 4 моих вопроса, я тебе открою тайну." << endl;

	cout << "Ну что ж, начнём?" << endl;
	cout << "Введите y чтобы продолжить"<<endl;
	cout << "Введите n чтобы закрыть программу"<<endl;
	cin >> f;
	
		if (f == 'n') return 0;
		else {
			cout << "Круто!!! " << "Мне достаточно скучно замкнутой в этой коробке. " << endl;
			cout << "Начнем с правил и инструкций:" << endl;
			instruction();
			cout << "Теперь начнём игру. " << endl;
			cout << "Вопрос номер 1: " << endl;
			cout << "За сколько часов Земля делает один полный оборот вокруг своей оси?" << endl;
			cin >> f2;

			if (f2 == 24) {
				cout << "Правильно!!!" << endl;
				b++;
			}
			else { cout << "Нет!!! За 24 часа." << endl; }

			cout << "Вопрос номер 2: " << endl;
			cout << "Как зовут основателя соцсети Facebook" << endl;
			cin >> name2;
			if (name2 != "Марк Цукенберг") {
				cout << "Нет!!! Его зовут Марк Цукенберг." << endl;
				
				
			}
			else {
				cout << "Правильно!!!" << endl;
				b++;
			}
			cout << "Вопрос номер 3: " << endl;
			cout << "Сколько лап у паука?" << endl;
			cin >> a2;
			if (a2 == 8) {
				cout << "Правильно!!! Ты очень умный." << endl;
				b++;
			}
			else { cout << "Нет!!! У паука 8 лап!!!" << endl; }
			cout << "Вопрос номер 4: " << endl;
			cout << "У куба 4 вершины?" << endl;
			cin >> f3;
			if (f3 == 'n') {
				cout << "Правильно!!!" << endl;
				b++;
			}
			else { cout << "Нет!!! У куба 8 вершин." << endl; }
			cout << "Вопрос номер 5: " << endl;
			cout << "Сколько лет Биллу Гейтсу? " << endl;
			cin >> a3;
			if (a3 == 61) {
				cout << "Правильно!!!" << endl;
				b++;
			}
			else { cout << "Нет!!! Ему 61 год." << endl; }
			cout << "Вопрос номер 6: " << endl;
			cout << "Как назывался первый в мире компьютер? " << endl;
			cout << "Напомню что интернетом пользоваться нельзя и названия пишутся с большой буквы)))" << endl;
			cin >> name3;
			if (name3 == "Эниак") {
				cout << "Правильно!!!" << endl;
				b++;
			}
			else {cout << "Нет!!! Первый компьютер на Земле назывался Эниак." << endl; }
			cout << "А теперь последний вопрос:  " << endl;
			cout << "Этот вопрос самый сложный)))) " << endl;
			cout << "Сколько будет 2+2*2?" << endl;
			cin >> a4;
			if (a4 == 6) {
				cout << "Правильно!!!" << endl;
				b++;
			}
			else { cout << "Хаха!!! Не правильно!!! 2+2*2 = 6." << endl; }
			cout << "Молодец!!! Ты ответил на все вопросы. Вот твои результаты:" << endl;
			cout << "Количество правильных ответов  = " << b << endl;
			if (b >= 4) {
				cout << "Ладно, Я росскажу тайну." << endl;
				cout << "Верка Сердючка - мужчина." << endl;
				cout << "Ну...на этом всё, спасибо за игру." << endl;
				cout << "Пока" << endl;
				system("pause");
				return 0;
			}
			else {
				cout << "Прости чувак. Ты ответил только на " << b << "вопросов." << endl;
				cout << "Ну...на этом всё, спасибо за игру." << endl;
				cout << "Пока" << endl;
				system("pause");
				return 0;

			}
		}
}
👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ошибка в том, что используются переменные не того типа.
Например

int a,a2,a3,a4, b, f2;
cin >> f2;
if (f2 == 24) {
То есть f2 это переменная типа int (целое число), а с клавиатуры можно ввести, что попало! (буквы, символы и т.д.) Тогда как сравнение идет именно по типу int.
Как вариант изменить тип переменных с int на string
Или добавить обработчик исключений try ... catch и т.д.

В общем есть особенности плюсов, на ряду с вольностями и возможностями (у разных версия компиляторов уже будут отличия)

А что, cyberforum закрыли?

то что ты неверно сделал прием аргументов — ерунда, это набиваемо.
а попробуй это что ты написал чуть по другому сделать

создай объект с списком вопросов, ответов, может вариаций
я не оч С++
но у тебя должно быть что-то тип того


[
{
id: 1,
q:"question?«,
a: «answer»,
order: 0
},
{
id: 2,
q:"question?«,
a: «answer»,
order: 2
}
]
но в этом случае не факт что ответ с консоли будет верным

я предлагаю тебе сделать, выбор ответов

тогда у тебя будет чуть другой объект по структуре

например:


[
{
id: 1,
q:"question?«,
answers: [
{id: 1,
answer: «answer1»
},
{id: 2,
answer: «answer2»
}
....
],
right: 2,
order: 0
},
......
]
пока так

можешь вобще создать это все в отдельном файле в удобном для С++ формате
перед стартом будешь читать файл и парсить

cin >> name2;
if (name2 != «Марк Цукенберг») {
Так нельзя.
Если вводишь, «Марк Цукенберг»
cin >> name2
«захавает» только «Марк» и положит его в name2.
следующий cin >>
захавает «Цукенберг», и т.д.
Что и создаст впечатление, что програма «сама отвечает».
если нужно вводить строки с пробелами, нужно использовать std::getline.

В никнейме твоем, кстати, тоже ошибка.

Никнейм я сам выбирал, поэтому мне решать как правильно.

Цукенберг мацу разводит
Гоги делает шашлык
А оленевод Бельдыев
Оленину и балык

Троллинг, нет?

gist.github.com — а вообще учитесь дебажить. Случаев, когда «не работает», будет возникать по 20 раз на дню, и по коду далеко не всегда можно угадать, что не так.

Подписаться на комментарии