gpt4 book ai didi

c++ - 从文件中读取数据创建多个文件

转载 作者:行者123 更新时间:2023-11-28 02:00:48 26 4
gpt4 key购买 nike

我编写了一个 C++ 代码来读取一个文件并从那里创建多个文件并将数据写入其中。我的输入文件如下:

11 2 3
22 3 14
33 4 15

每一行的第一位是文件名,后面的两位是要写入的数据。我的代码如下:

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<fstream>
using namespace std;
main()
{
ofstream os1;
FILE *fp;
int a;
int k1,k2;
char fileName[] = "0.txt";
fp=fopen("input.txt", "r");

while (fscanf(fp, "%d", &a) != EOF)
{
fscanf(fp, "%d", &k1);
fscanf(fp, "%d", &k2);
fileName[0]=a;
os1.open (fileName);
os1<<k1<<"\t"<<k2<<"\n";
os1.close();
}

}

但是当我运行程序时,没有创建文件。代码有什么问题吗?我将如何创建文件?

最佳答案

当您使用 fscanf(fp, "%d", &a); 读取“文件名”时,变量 a 将不包含 ascci 值“1”而是一个二进制值为 1 的整数。

当您使用 fileName[0]=a; 设置文件名的第一个字符时,该字符将是 '\x01`,因此是一个不可打印的字符。这是 prohibited in many filesystems ,这可能会导致您的打开失败。

因此,请始终检查文件的状态以查看是否打开成功。


顺便问一下,为什么不使用 ifstream 来读取文件?

int k1,k2;
string fileName = "0.txt";
ifstream ifs("input.txt");

if (!ifs) {
cerr << "Couldn't open input file" <<endl;
return 1;
}

while (ifs >> fileName[0]) { // note that you read a char, now
ifs >> k1 >> k2;
ofstream os1(fileName);
if (! os1)
cerr <<"Couldn't open output file "<<fileName<<endl;
else {
os1<<k1<<"\t"<<k2<<"\n";
} // closing is done automatically as os1 goes out of scope
}

编辑

好吧,您的原始代码表明您希望读取一个数字来构造文件名,所以我只是在我的回答中换成了等价的东西。

所以如果你想读取一个字符串作为第一个元素,它相对容易完成:不要直接读取到 fileName[0],而是执行:

string fileName; 
string fileSuffix = ".txt"; // only
...
while (ifs >> fileName) { // read a string
fileName += fileSuffix;
...

优点是您现在可以将任何内容作为输入,例如:

11 2 3
E2 3 14
primes 7 11

如果你想读取一个整数,你完全可以这样做

int a; 
string fileName;
string fileSuffix = ".txt";
...
while (ifs >> a) { // for people loving integers
fileName = to_string(a) + fileSuffix;
...

关于c++ - 从文件中读取数据创建多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com