简体   繁体   中英

How can i check a variable type in a conditional statement in c++?

I am pretty new to c++ and im having an issue trying to get my program out of a loop when a string is entered for the variables cont, and answer. In python it is pretty easy to do simple checks but I am not sure what I should be doing in cpp. I tried doing a check using if(typeid(answer)) == typeid(string)) but this doesnt work. I havent tried putting a check for 'y'||'Y'||'n'||'N' for cont but im assuming it would be something like that? just check for those 4 characters?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

int main() {
    unsigned seed;
    char cont = 'y';
    int answer = 0;
    seed = time(nullptr);
    srand(seed);
    rand() % 100 + 1;


    cout << "Lets play a math game!\n";

     while(cont == 'y')
    {
        int num1 = rand() % 100 + 1;
        int num2 = rand() % 100 + 1;
        cout << "What is the result of this addition? \n " << num1 << '\n' << "+" << num2 << endl;
        cin >> answer;
        if (typeid(answer)==typeid(string))
        {
            while(typeid(answer) == typeid(string))
            {
                cout << "Please enter an integer!" << endl;
                cin >> answer;
            }
        }
        else if (typeid(answer) == typeid(int)) {
            if (answer == (num1 + num2)) {
                cout << "You are correct, would you like to play again?" << endl;
                cin >> cont;
            } else {
                cout << "You were incorrect, would you like to try again? enter y/n" << endl;
                cin >> cont;
            }
        } else {
            answer = 0;
            cout << "You did not enter an integer!\n" << endl;
            cout << "Would you like to try again?" << endl;
        }
    }
    return 0;
}

How can i check a variable type in a conditional statement in c++?

You do that already, though I'd do this instead:

#include <type_traits>
#include <iostream>
int main() {
    int answer =0;
    if constexpr(std::is_same_v<int,decltype(answer)>) {
        std::cout << "answer is indeed an int";
    }
}

However, this will always print the expected answer is indeed an int , because answer is an int not something else. If the user enters invalid input the variable answer declared as int will not turn into a std::string .

would something like if(inRange(0,200,answer)) work?

No it would not. std::cin >> answer; either succeds to read a number, or it fails and then 0 is assigned to answer . You cannot decide if valid input was entered by looking at answer only.

To check if the user entered valid input you can check the state of the stream:

#include <iostream>
#include <limits>

int main() {
    int answer =0;

    while(!(std::cin >> answer)){
        std::cout <<  "please enter a number\n";
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    std::cout << answer;
}

Note that this accepts for example 42asdf as valid input, because std::cin >> answer does read 42 before it encounters something that is not a number. For something more sophisticated you can read a std::string and parse that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM