using boolean with switch

Oct 5, 2012 at 5:08pm
Hi I'm new here, and I just started learning C++ programming. I've been looking everywhere on the internet to show me how to combine boolean values and switch() to get the test results. The program just goes to default and print out Grade 0. Am I using the bool wrong or switch wrong? Some pointers would be very appreciated, thank you.

//Test 1. Carbon content is below 0.67
//Test 2. Rockwell hardness is no less than 50
//Test 3. Tensile strength is greater than 70,000 psi

//Grade10 = 3 test pass
//Grade9 = Test1 and test2 pass
//Grade8 = Test 1 pass
//Grade7 = none passed
//Grade0 = for all other cases.


#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double c;
double R;
double T;
bool t1;
bool t2;
bool t3;
int total;

int main()
{
cout << "Please input the carbon content: "; cin >> c;
cout << "\nPlease input the Rockwell hardness: "; cin >> R;
cout << "\nPlease input the Tensile strength: "; cin >> T;

// definitions of tests
t1 = c < 0.67;
t2 = R >= 50;
t3 = T >= 70000;
total = t1 += t2 += t3;

switch( total )
{
case 111: cout << "The metal is Grade 10" << endl; break;
case 110: cout << "The metal is Grade 9" << endl; break;
case 100: cout << "The metal is Grade 8" << endl; break;
case 000: cout << "The metal is Grade 7" << endl; break;
default: cout << "The metal is Grade 0" << endl; break;
} // end switch
} //
Last edited on Oct 5, 2012 at 5:19pm
Oct 5, 2012 at 5:32pm
I'm not sure how += works with bool values but it's not doing what you want.
total = t1 += t2 += t3;

Is this what you want?
total = t1 * 100 + t2 * 10 + t3;
Oct 5, 2012 at 5:35pm
yes, you are using the booleans wrong. instead of:

bool t1, t2, t3;

use

int t1, t2, t3;
Oct 5, 2012 at 6:07pm
It finally works, but I don't understand why it works... I used cout to see what the output will look like, but where is that 3 coming from??

int t1(true);
int t2(true);
int t3(true);
.
.
.
// definitions of tests
if(c < 0.67) t1 += 100;
if(R >= 50) t2 += 10;
if(T >= 70000) t3 += 1;
cout << t1 + t2 + t3 << endl;

switch( t1 + t2 + t3 )
{
case 114: cout << "The metal is Grade 10" << endl; break;
case 113: cout << "The metal is Grade 9" << endl; break;
case 103: cout << "The metal is Grade 8" << endl; break;
case 003: cout << "The metal is Grade 7" << endl; break;
default: cout << "The metal is Grade 0" << endl; break;
} // end switch
Last edited on Oct 5, 2012 at 6:11pm
Oct 5, 2012 at 11:10pm
true converted to int is 1 so t1, t2 and t3 will all be initialized to 1. Now it shouldn't be hard to see why you get 3.
Oct 6, 2012 at 12:30am
thanks for clarifying that.
Topic archived. No new replies allowed.