idkwhatimdoing Ответов: 2

У меня возникли проблемы с операторами if в C++


Здравствуйте, у меня есть проект в моем классе кодирования, где я должен использовать заявление if для допуска в парк в зависимости от возраста, я сделал все в порядке с этой частью, но затем он сказал нам добавить продажу со скидкой 20%, если вы купите 10 или более билетов. Когда я попробовал код он вышел таким образом
Пожалуйста, поставьте несколько билетов
12
пожалуйста, укажите возраст
9
Вход стоит 120 долларов
24
вход стоит 48 долларов
240

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

вот мой код на данный момент

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
	int a, b;
	cout << "Please put down a number of tickets" << endl;
	cin >> b;
	cout << "Please enter an age" << endl;
	cin >> a;
	
	if (a<=5)
	{
		cout << "admission is free" << endl;
	}
	
	if (a>=5&& a<=10) 
		cout << " Admission is $";
	{		
		cout << (b * 10) << endl;	
	}
		
	{
			cout << (b * 10) *.2 << endl;
		}

	if (a>10&& a <= 21)
	{ 
		cout << "admission is $" ;
		if (b>10) 
		{ 
			cout << (b *20) * .2 << endl;
		}
		cout << (b*20) << endl;
	}
	if (a<=55)
	{
		cout << "admission is $";
		if (b>10)
		{ 
			cout << (b * 20) * .2 << endl;
		}
		cout << (b*20) << endl;
	}
	if (a>21&& a<55)
	{
		cout << "admission is $";
		if (b>10)
		{ 
			cout << (b* 35) * .2 << endl;
		}
		cout << (b*35) << endl;
	}
	system("pause");
	}


Что я уже пробовал:

переставляя двоеточия, используя операторы else, я пытался использовать операторы then, но программа, которую я использую, не распознает его. Мне не хватает заголовка для него? Я знаю, что математика для продажи неверна, но я исправлю это, как только узнаю, как это исправить

Richard MacCutchan

Пожалуйста, добавьте соответствующие теги <pre> (используйте кнопку "код") вокруг вашего кода и исправьте отступ. Только тогда он будет читаем, чтобы мы могли видеть, где все идет не так.

Member 13566383

а и в-плохие названия для переменных. Переименуйте их, например, в "возраст" и "количество билетов".

2 Ответов

Рейтинг:
18

OriginalGriff

Каждый раз, когда вы используете cout он будет печатать. Затем он переходит к следующей строке и выполняет ее.
Поэтому, когда ваш код делает это:

cout << "admission is $";
if (b>10)
{
    cout << (b* 35) * .2 << endl;
}
cout << (b*35) << endl;
Он выведет два значения.

Выньте все это
if (b>10)
{
    cout << (b* 35) * .2 << endl;
}
код, а также удалить все предыдущие couts - замените их переменной, которую вы вычисляете:
double toPay = 0.0;
	if (a<=5)
	{
		toPay = 0.0;
	}
Повторите это для всех if условия, с соответствующими расчетами.
Затем в конце проверьте, есть ли 10 или более человек, и примените скидку к значению toPay.
Затем выведите одну строку с помощью cout.

Если вы хотите, чтобы код выглядел красивее и легче читался, используйте else if вместо того, чтобы добавлять новые условия.
	if (a <= 5)
	{
...
	}
	else if (a <= 10) 
	{
...
	}
	else if (a <= 21)
	{ 
...
	}
	else if (a <= 55)
	{
...
	}
	else 
	{
...
	}


CPallini

5.

Рейтинг:
1

Stefan_Lang

В вашем коде есть несколько проблем, но сейчас я сосредоточусь на 'if' заявления:

1. 'if- заявления могут принимать любую из этих форм:

if (/*condition*/)
    ; // empty expression; this ends the if statement without doing anything
if (/*condition*/)
    a = b; // some more or less meaningful expression; the if statement ends at the ';'
if (/*condition*/)
{  // this starts a command block which is executed if 'condition' is true
    a = b;
    c = d;
}  // end of command block, and end of if statement


2. для любой из этих форм, вы можете выбрать, чтобы добавить 'else' заявление. 'else- операторы следуют точно такому же синтаксису, как и 'if' заявления:
if (/*condition*/)
    ; // end of if
else
    ; // empty statement
if (/*condition*/)
    ; // end of if
else
    a = d; // simple command; the ';' ends the 'else' statement
if (/*condition*/)
    ; // end of if
else
{  // else block with multiple commands
    a = d;
    c = b;
}  // ends the else block


3. Как указал ОГ в решении 1, вы можете вложить 'if"заявления в пределах..."if' или 'else' заявление. Если вы решите сделать это, то это поможет, если вы используете синтаксис последней формы (то есть окружение '{}'):
if (/*condition 1*/)
    c = d; // this will be executed if condition 1 is true
else
{
    if (/*condition 2*/)
        c = a; // this will be executed if condition 1 is false and condition 2 is true
    else
        c = b; // this will be executed if both conditions are false
}

Вы можете опустить окружающее '{}"в этом последнем примере, потому что есть только одно утверждение (the 'if- а следование ?else"утверждение считается только одним), но с помощью скобок немного легче увидеть, где каждый из них"else' принадлежать.

4. Что касается вашего кода, то этот второй if оператор выглядит немного странно: есть одна команда и два командных блока, следующих за ней. if, но с тех пор как if оператор заканчивается после этой первой команды, два следующих блока выполняются безоговорочно. Однако ясно, что эти блоки не должны выполняться всегда; if или else условия отсутствуют. Вы должны посмотреть на команду и два блока после нее. if заявление и решить, какие из них должны быть выполнены при каких условиях. Затем добавьте соответствующее условие (или else) перед каждой командой или блоком.

5. в качестве более общего совета я предлагаю отделить условное ценообразование от скидки. Нет необходимости тестировать все комбинации возраста и размера группы - вы можете рассматривать их отдельно и хранить результат тестирования в локальных переменных (например, base_price на основе возраста и скидка на основе размера группы). Как только вы знаете правильную базовую цену и скидку, вы можете выполнить расчет и вывод, и вам не нужно повторять варианты по всему вашему коду. Вот упрощенная версия:
float base_price;
if (a <= 5)
    base_price = 0.0;
else
{
    if (a <= 10)
        base_price = 10.0;
    else
        base_price = 20.0;
}
float discount = 0.0;
if (b >= 10)
    discount = 0.2;
float fee = base_price * b * (1.0 - discount);
cout << "admission fee = $" << fee << endl;