整型的C++参数
C++ arguments to integer
我正在尝试创建一个带有args[1]的文本文件,该文件应该是一个整数。文件名应该是ex"3.txt",但我得到的文件名仅为"t"。数字参数是正确的,但文件名在某种程度上变得不正确。对于提高代码的可读性和可用性,您有什么建议?
int main(int argc,char *args[])
{
ofstream myFile;
int num = atoi(args[1]);
myFile.open(num + ".txt");
if (myFile.is_open())
{
myFile << "numn" ;
for(int i=num; i > 0; i--)
myFile << i + ",";
myFile.close();
}
}
小把戏。当你这样做:
myFile.open(num + ".txt");
实际上,您并没有将int转换为字符串。相反,您将char const*
作为".txt"
,并在将其传递给打开之前用num
(在您的情况下为3)个字符对其进行偏移,从而获得您的"t"文件。
我看到你在用C++。如果可以的话,使用std::string
和C++11的std::to_string
函数可以省去一些麻烦。
我看不出为什么要将命令行参数转换为第一位的数字。
像一样更改代码
myFile.open((std::string(argv[1]) + ".txt").c_str());
或者对于更新的编译器版本(能够实现c++11标准)
myFile.open(std::string(argv[1]) + ".txt");
您不需要将argv[1]
转换为数值。
您的问题是由于使用了错误的类型。首先定义了int() + "text"
,但并没有达到您的期望。这不是对字符串的操作,而是对指针的操作。你最好用一种语言。c++包含std::字符串,对他来说很容易。最初您应该从args[1]
:生成字符串
string num(args[1]);
当然,应该给它,你需要检查它是否合适!
if(argc < 2)
//some throw
之后,操作员plus
将按照您的意愿工作。因此,您只需在num
中添加".txt"即可。
num += ".txt"
现在,您必须使用ofsrem打开文件。它需要const char*
,并且给定地址上的字符串应该以' '
结尾,这样您就可以使用std::basic_string::c_str。
ofstream my_file(num.c_str());
众所周知,由于c++11,您可以只给出std::string:
ofstream my_file(num);
让我们进入main("C++参数到整数")主题。你可以使用std::stoi。正如您所看到的,您不需要担心数字后面的字符。
for(int i=stoi(num); i > 0; i--)
myFile << i << ","; //it can't be i + "," - as above
或者,如果您想直接将参数转换为整数,您可以使用std::atoi。
int i = atoi(args[1]);
最后,代码的开头应该是这样的:
if(argc < 2)
{//some throw}
ofstream myFile;
string num =string(args[1])+".txt";
myFile.open(num.c_str());
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用