我正在尝试使用args [1]创建一个文本文件,该文件应该是一个整数。文件名应为ex“3.txt”,但我得到的文件只是“t”。 number参数是正确的,但文件名以某种方式变得不正确。您有什么建议来改进此代码的可读性和可用性?
int main(int argc,char *args[])
{
ofstream myFile;
int num = atoi(args[1]);
myFile.open(num + ".txt");
if (myFile.is_open())
{
myFile << "num\n" ;
for(int i=num; i > 0; i--)
myFile << i + ",";
myFile.close();
}
}
答案 0 :(得分:4)
棘手的一个。当你这样做时:
myFile.open(num + ".txt");
...你实际上并没有将int翻译为字符串。相反,您正在使用char const*
".txt"
并将其num
(在您的情况下为3个)字符集中,然后将其传递给打开,这样您的“t”文件。
我看到你正在使用C ++。如果可以的话,使用std::string
和C ++ 11的std::to_string
函数可以避免一些麻烦。
答案 1 :(得分:1)
我看不出您将命令行参数转换为第1位数字的原因。
更改您的代码,如
myFile.open((std::string(argv[1]) + ".txt").c_str());
或更新的编译器版本(能够c++11标准)
myFile.open(std::string(argv[1]) + ".txt");
您无需将argv[1]
转换为数字值。
答案 2 :(得分:0)
您的问题是由于使用了错误的类型造成的。首先定义了int() + "text"
,但没有达到预期的效果。它不是对字符串的操作,而是on pointers。你最好使用一种语言。 c++包含std::string,他很容易理解。最初你应该从args[1]
:
string num(args[1]);
当然,它should be given,你需要检查它是否合适!
if(argc < 2)
//some throw
之后,运营商plus
将按照您的意愿运作。因此,您只需将“.txt”添加到num
。
num += ".txt"
现在您必须使用ofstrem打开文件。它期望const char*
,并且指定地址上的字符串应以'\0'
结尾,因此您可以使用std::basic_string::c_str。
ofstream my_file(num.c_str());
要知道,因为c++11你可以只给std :: string:
ofstream my_file(num);
让我们来看看主题(“整数的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());