整数的C ++参数

时间:2014-10-29 23:25:56

标签: c++ char int args

我正在尝试使用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();
    }
}

3 个答案:

答案 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());

或更新的编译器版本(能够标准)

 myFile.open(std::string(argv[1]) + ".txt");

您无需将argv[1]转换为数字值。

答案 2 :(得分:0)

您的问题是由于使用了错误的类型造成的。首先定义了int() + "text",但没有达到预期的效果。它不是对字符串的操作,而是on pointers。你最好使用一种语言。 包含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());

要知道,因为你可以只给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());