Jack
Jack

Reputation: 461

How to output a variable stored in another variable

So here's my code at the moment:

#include <iostream>
using namespace std;

int main() {
    string x = "_one";
    int sound_one = 7;
    int sound_two = 8; 
    cout << ("sound") + x;
}

However when I run the code, it outputs 'sound_one' instead of '7'. How do I get it to output the variable sound_one instead of just 'sound_one'? Also, I need it so I can change x to different things (eg '_two') so it will then output sound_two instead. Any help would be greatly appreciated.

Upvotes: 1

Views: 609

Answers (3)

Aykhan Hagverdili
Aykhan Hagverdili

Reputation: 29955

You can't do that in C++. You can use a map as shown in another answer, but I feel like what you really need is an array:

#include <format>
#include <iostream>

int main()
{
    int data[] { 7, 8 };
    std::cout << std::format("data[{}] = {}\n", 0, data[0]);
}

Arrays are usually better for such simple ordered sequences.

Upvotes: 1

Bathsheba
Bathsheba

Reputation: 234645

C++ is not a reflective language in the sense that you can acquire a variable name at runtime (variable names are normally compiled out of the program). You can use std::map though to achieve your immediate aim:

#include <iostream>
#include <string>
#include <map>
 
int main() {
    using std::literals::string_literals::operator""s;

    std::string x = "_one";
    std::map<std::string, int> data;
    data["sound_one"] = 7;
    data["sound_two"] = 8;
    std::cout << data["sound"s + x];
}

Note the notation "sound"s: the suffixed s denotes a std::string user defined literal.

Upvotes: 3

Chris Wilhelm
Chris Wilhelm

Reputation: 141

You can't a variable from a string in this way. A work around is to use if/switch statements until the variable name is matched and then print it:

if(x == "_one") {
   cout << sound_one;
}
else if(x == "_two") {
   cout << sound_two;
}
else {
   cout << "no match";
}

Upvotes: 1

Related Questions