【问题标题】:String as file name in C++ Outfile字符串作为 C++ Outfile 中的文件名
【发布时间】:2014-12-09 04:08:51
【问题描述】:

有人可以告诉我为什么以下方法不起作用吗?

#include <fstream.h>  
#include <iostream.h>

std::string data, newtitle, body;
ofstream outfile;

int main()
{
   cout << "enter body of note: ";
   cin >> body;

   cout << "enter title of note: ";
   cin >> newtitle;

   data =  newtitle + ".dat";

   outfile.open(data, ios::out);
   outfile << body << endl;
   outfile.close();               

   system("pause");
   return 0;
}

问题似乎源于尝试结合 newtitle.dat

谢谢

【问题讨论】:

    标签: c++ string file-io ofstream


    【解决方案1】:

    首先,

    #include <fstream.h>  
    

    错了,应该是

    #include <fstream>  
    

    另一个标题也是如此。

    其次,你需要

    #include <string>
    

    使用std::string

    第三,如果你正在为 C++03 编译,那么没有构造函数采用 std::string。然而,这已在 C++11 中得到修复。


    提示 #1: 你不需要system( "pause" )。在 Visual Studio 中,只需使用 Ctrl+F5 即可运行程序。然后控制台窗口保持不变。

    或者,只需从命令行运行程序。


    提示 #2: 您可以通过尽可能接近第一次使用来声明变量来避免很多麻烦。例如,通过将std::string data, newtitle, body; 移动到main,并尽可能晚地声明每个变量,您可以确保没有其他代码与这些变量混淆,并且完全清楚初始值是什么等等。


    提示 #3: main 的末尾不需要 return 0;:这是默认设置。

    【讨论】:

    • @pezy:C++ 语言由国际 ISO 标准定义。它确实要花钱,所以不能直接链接。但是您可以从委员会页面下载草稿(草稿是免费的),或者您可以查看例如(cppreference.com),虽然这是二手信息,因此不太可靠。关于“良好实践”,我认为是这样,因为 IMO 简化代码的每一个实践都是好的。显式的return 0 表示返回其他东西的可能性,这对大多数初学者的程序来说是一种误导。添加误导性文本是 IMO 不好的。 IE。删除它是好的。
    • 非常感谢!我看了草稿(N3690),它说:“如果控制到达main的末尾而没有遇到return语句,效果就是执行return 0;”(3.6.1.5)。我以前不知道。再次感谢。
    【解决方案2】:

    std::cin空格

    分隔输入字符串

    如果您将此文本输入到第一个 cin

    abc 定义

    body 变量将为 abc,newtitle 将为 def。在这种情况下,std::getline 可能就是答案

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2015-11-25
      • 2014-12-26
      • 2016-11-18
      • 1970-01-01
      • 2022-06-28
      相关资源
      最近更新 更多