在C ++中将文件名存储为变量

时间:2018-07-26 15:18:50

标签: c++

在下面的代码中,我有一个结构数组。 现在,我想存储用户输入到hello[1].fname的同名文本文件。我该如何更改我的代码?

struct customer{
    string fname;
    string lname;
    int age;        
} ;

int main()
{
    int x;
    ofstream client;

    cout<<"number ff family members?";

    cin>>x;
    customer hello[x];
    for(int i=0;i<x;i++)
    {

      cin>>hello[i].fname;
      cin>>hello[i].lname;
      cin>>hello[i].age;

    }
    **client.open(hello[1].fname.text);**

    if(!client)
    {
        cout<<"error";
    }
}

1 个答案:

答案 0 :(得分:4)

C ++不允许在C语言中使用所谓的可变长度数组(VLA),所以您的代码

cin>>x;
customer hello[x];

不是合法的C ++。请改用std::vector<customer>

xi的类型应为std::size_t而不是int,因为int可能不足以容纳所有可能的对象大小/索引

声明并定义变量的实际使用位置。代替

ofstream client;
// numerous lines of code
client.open( /*... */ );

// numerous lines of code
ofstream client( /* ... */ ); // use the constructor instead of open()

最后但并非最不重要:

client.open(hello[1].fname.text);

customer::fname类型为std::string,它没有名为text的成员。只需使用

ofstream client(hello[1].fname);

ofstream client(hello[1].fname.c_str());

如果必须使用不支持std::ofstream且仅使用std::string的{​​{1}}的构造函数的标准库实现,则为

PS:您知道C和C ++中的数组从索引0开始吗?奇怪的是,您使用const char *作为文件名。