如何用自定义值作为局部变量名赋值?(禁用数组)
问题与解决方案:无法动态生成局部变量名存储文件读取值
需要从文件读取内容转换为double类型,循环中通过counter拼接'a'的方式,将值分别存入a0、a1、a2、a3四个局部变量。尝试
'a'+counter= SomethingDouble;报错,且作业禁止使用数组,寻求可行方案。
C++是静态类型语言,不支持在运行时动态生成局部变量名,你写的'a'+counter本质是计算ASCII码值,并非变量名,因此会报错。以下是几种符合要求的替代方案:
方案1:switch-case分支判断
直接根据counter的值分支赋值,逻辑清晰且完全符合作业要求:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { fstream someFileStream; someFileStream.open("RandomFileName.txt"); double a0, a1, a2, a3; string SomethingString; for (int counter = 0; counter <= 3; counter++) { getline(someFileStream, SomethingString); double SomethingDouble = stod(SomethingString); switch(counter) { case 0: a0 = SomethingDouble; break; case 1: a1 = SomethingDouble; break; case 2: a2 = SomethingDouble; break; case 3: a3 = SomethingDouble; break; } } someFileStream.close(); // 可添加变量使用逻辑 cout << a0 << " " << a1 << " " << a2 << " " << a3 << endl; return 0; }
方案2:使用std::tuple封装变量
用tuple将四个double变量打包,通过索引完成赋值和取值,后续可直接提取为单独变量:
#include <iostream> #include <fstream> #include <string> #include <tuple> using namespace std; int main() { fstream someFileStream; someFileStream.open("RandomFileName.txt"); tuple<double, double, double, double> a_tuple; string SomethingString; for (int counter = 0; counter <= 3; counter++) { getline(someFileStream, SomethingString); double SomethingDouble = stod(SomethingString); switch(counter) { case 0: get<0>(a_tuple) = SomethingDouble; break; case 1: get<1>(a_tuple) = SomethingDouble; break; case 2: get<2>(a_tuple) = SomethingDouble; break; case 3: get<3>(a_tuple) = SomethingDouble; break; } } someFileStream.close(); // 提取为单独变量使用 double a0 = get<0>(a_tuple); double a1 = get<1>(a_tuple); double a2 = get<2>(a_tuple); double a3 = get<3>(a_tuple); cout << a0 << " " << a1 << " " << a2 << " " << a3 << endl; return 0; }
方案3:指针数组指向已有变量
定义指针数组指向预先声明的a0-a3,通过指针完成赋值,规避“使用数组存储值”的限制:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { fstream someFileStream; someFileStream.open("RandomFileName.txt"); double a0, a1, a2, a3; double* vars[] = {&a0, &a1, &a2, &a3}; // 指针数组指向已有变量 string SomethingString; for (int counter = 0; counter <= 3; counter++) { getline(someFileStream, SomethingString); double SomethingDouble = stod(SomethingString); *vars[counter] = SomethingDouble; // 通过指针赋值 } someFileStream.close(); cout << a0 << " " << a1 << " " << a2 << " " << a3 << endl; return 0; }
内容的提问来源于stack exchange,提问作者Y K
相关产品推荐
相关产品推荐

