整型的C++参数

C++ arguments to integer

本文关键字:参数 C++ 整型      更新时间:2023-10-16

我正在尝试创建一个带有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());