【问题标题】:How to use variable this way c++如何以这种方式使用变量c ++
【发布时间】:2017-06-16 13:14:08
【问题描述】:

我正在制作一个 C++ 程序,其中有多个变量,例如: 变量 1、变量 2、变量 3、变量 4;

我想将它用于 for 循环,例如:

for(int x; x<=5; x++){
if(var1==1){cout << "hi";}
} 

但我不想输入 var1,而是将其设为 var"x",其中 x 等于 1。 我记得在我的批处理编程时代(不准确)我可以这样使用:

set x=1
echo var%x%

那么输出将是 var1。

【问题讨论】:

  • 你不能在 C++ 中构造这样的变量名。您可能想要ints 中的std::vector,可以这样访问:myInts[x]
  • 你展示的那个for循环不会很好地工作,因为你没有初始化x
  • 不要添加(已解决)也不要发布“谢谢”cmets。相反,请投票并接受对您有帮助的答案。
  • 学习 C++ 无可替代。

标签: c++ batch-file variables cmd


【解决方案1】:

您可以使用宏来执行此操作,但我真的认为这不是一个好主意。为什么不使用数组呢?使用数组,你可以引用你想要的索引,所以不是var1var2var3,......它将是var[0]var[1]var[2],......更像C++ ,无论如何。

在使用数组时,我什至建议考虑 C++ 提供的容器类之一,例如 std::vectorstd::array。要在向量中有一个简单的整数变量数组,只需声明一个,例如:std::vector&lt;int&gt; intVec,要提取特定元素,请使用at 函数,例如intVec.at(0),它将提取第一个元素。真正使用几乎所有其他方法,而不是宏。

话虽如此,要在宏中执行此操作,您需要制作这样的宏:

#define var(x) var##x

var(1) = 2;  // resolves to var1 = 2;

然而,宏是编译时的,所以在循环中使用它们,通过向它传递一个变量,不会像你期望的那样工作。所以调用int x = 1; var(x) = 2; 不会将var1 设置为2,而是尝试将varx 设置为2。

宏解决方案有很多缺点,一个是让你的可读性降低,另一个是让你的代码更容易出错,最后,为什么要摒弃“C++ 方式”?

【讨论】:

  • 但他必须明确写:var(0), var(1), var(2) 所以循环是多余的,因为宏不知道什么是 (var(i))。
  • @Raindrop7 在示例下的第一段中也有说明 :)
【解决方案2】:

您可以在调用程序可执行文件时使用命令行参数。

prog.exe 3 4 1 6

这样您的程序将接收 5 个命令行参数,第一个是程序名称本身。

代码如下所示:

int main(int argc, char *argv[]) {
    // For the above example, argc = 5
    for (int i = 1; i < argc; ++i) {
        // make use of argv[i]
    }
}

这可能不是您想要做的,但证实了您对多个变量 var1 的想法,即 argv[1]

【讨论】:

    【解决方案3】:

    在许多脚本编程中都可以做到这一点,但遗憾的是 C++ 中没有直接支持。

    一些解决方法是使用数组(如果可能)或指向实际变量的指针数组。

    int vars[5] = {...};
    for(int x = 0; x < 5; x++){
        if(var[x]==1){cout << "hi";}
    }
    

    int var0 = 2, var1 = 42, var2 = 7;
    int *const pvars[] = {&var0, &var1, &var2};
    
    for(int x = 0; x < 3; x++) {
        if(*(pvars[x]) == 1)
        {
            cout << "hi";
        }
    }
    

    或如this comment中所述

    int var0 = 2, var1 = 42, var2 = 7;
    
    for(auto &var = {var0, var1, var2}) {
        if(var == 1)
        {
            cout << "hi";
        }
    }
    

    【讨论】:

    • 因为我还是个学生,我实际上忘记了数组!谢谢你!
    • 甚至(在 C++11 中)for (int var : {var0, var1, var2}) { if (var == 1) { std::cout &lt;&lt; "hi"; } }.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多