使用c ++中的for循环创建多个文件。
目标: - 在名为 1.txt , 2.txt , 3的相应文件夹中创建多个文件。 TXT
以下是我的示例代码:
int co = 3;
for (int i = 1; i <= co; i++)
{
ofstream file;
file.open (i+".txt");
file.close();
}
此代码创建三个文件:t,xt和txt。
此代码中发生了什么?和 我的代码出了什么问题?
答案 0 :(得分:1)
您需要将i
转换为字符串才能使用operator+
将其连接起来,否则您将无意中执行pointer arithmetic:
// C++11
#include <fstream>
#include <string> // to use std::string, std::to_string() and "+" operator acting on strings
int co = 3;
for (int i = 1; i <= co; i++)
{
ofstream file;
file.open (std::to_string(i) + ".txt");
file.close();
}
如果您无权访问C ++ 11 (或者如果您想避免明确“转换i
然后连接”),则可以使用std::ostringstream
:
// C++03
#include <fstream>
#include <sstream>
std::ostringstream oss;
int co = 3;
for (int i = 1; i <= co; i++)
{
ofstream file;
oss << i << ".txt"; // `i` is automatically converted
file.open (oss.str());
oss.str(""); // clear `oss`
file.close();
}
注意: clang ++ 使用-Wstring-plus-int
警告标记(wandbox example)捕获此错误。
答案 1 :(得分:1)
在C ++中,你不能简单地#34;连接&#34;带整数的字符串文字。字符串文字将分解为指向常量char(char const *
)的指针,并且指针算术规则适用。
当从指针添加或减去整数值时,结果是一个指向对象的指针,该对象是内存中进一步的元素数量 - 当然,只有当内存的边界没有交叉时,这才会成立
答案 2 :(得分:0)
您必须先将i
转换为std::string
:
int co = 3;
for (int i = 1; i <= co; i++){
ofstream file;
file.open (std::to_string(i) + ".txt"); //Here
file.close();
}