【问题标题】:How do you output variable's declared as a double to a text file in C++如何将声明为双精度的变量输出到 C++ 中的文本文件
【发布时间】:2009-09-04 10:12:49
【问题描述】:

我对 C++ 很陌生,我想知道如何将声明为 double 的变量输出/写入 txt 文件。我知道如何使用 fstream 输出字符串,但我不知道如何发送其他任何内容。我开始认为除了字符串之外,您不能将任何内容发送到文本文件,对吗?如果是这样,您将如何将存储在变量中的信息转换为字符串变量?

这是我试图在其中实现这个概念的代码,它相当简单:

int main()
{

double invoiceAmt = 3800.00;
double apr = 18.5;            //percentage

//compute cash discount
double discountRate = 3.0;    //percentage
double discountAmt;

discountAmt = invoiceAmt * discountRate/100;

//compute amount due in 10 days
double amtDueIn10;

amtDueIn10 = invoiceAmt - discountAmt;

//Compute Interest on the loan of amount (with discount)for 20 days
double LoanInt;

LoanInt = amtDueIn10 * (apr /360/100) * 20;

//Compute amount due in 20 days at 18.5%.
double amtDueIn20;

amtDueIn20 = invoiceAmt * (1 + (apr /360/100) * 20);
return 0;
}

所以我要做的是使用这些变量并将它们输出到文本文件。另请告知我需要用于此源代码的包含。请随时就如何以其他方式改进我的代码提出建议。

提前致谢。

【问题讨论】:

  • 作为一般说明,因为您可能是编程新手(而不仅仅是 C++);使用浮点数进行货币计算通常不是一个好主意。您希望尽可能准确地处理您的资金,而浮点计算无法胜任这项任务。
  • 好吧,我实际上对编程并不陌生,我已经学习了 Java 和 vb,但那是 2 年前的事了,所以已经有一段时间了。双打的原因是这是一项课堂作业,我的教授出于某种原因希望他们这样声明。

标签: c++ iostream fstream


【解决方案1】:

正如您的标记所暗示的,您使用文件流:

std::ofstream ofs("/path/to/file.txt");
ofs << amtDueIn20;

根据您需要文件的用途,您可能需要编写更多内容(如空格等)才能获得合适的格式。

编辑由于 rmagoteaux22 的持续问题:

这段代码

#include <iostream>
#include <fstream>

const double d = 3.1415926;

int main(){
    std::ofstream ofs("test.txt");
    if( !ofs.good() ) {
        std::cerr << "Couldn't open text file!\n";
        return 1;
    }
    ofs << d << '\n';
    return 0;
}

为我编译 (VC9) 并将其写入 test.txt:

3.14159

你可以试试这个吗?

【讨论】:

  • 我已经做了很多研究并了解了这个源代码,但如果它是用字符串而不是变量编写的,我似乎只能让它工作。关于原因有什么建议吗?
  • 您可能忘记了#include &lt;ostream&gt;(带有输出流函数的标题)。你可能得到了std::ofstreamfstreamoperator&lt;&lt;(std::ostream&amp;, std::string)&lt;string&gt;
  • 还是不行...这是我试过的代码:ofstream outFile("Program1.txt"); outFile
  • 哦,我有 outFile.close();最后所以不是那个
  • 不,这不是你的问题。 (它应该也可以在调试模式下工作。)你只是隐藏了问题,但它仍然潜伏在某个地方,等着在你最意想不到的时候跳到你身上。
【解决方案2】:

只需使用流写操作符 operator

#include <fstream>

...


    std::fstream stmMyStream( "c:\\tmp\\teststm.txt", std::ios::in | std::ios::out | std::ios::trunc );

    double dbMyDouble = 23.456;
    stmMyStream << "The value is: " << dbMyDouble;

【讨论】:

  • 我使用了您提供的代码并对其进行了测试,写入我的文本文件的所有内容都是“值是:”。变量根本没有显示。请帮忙
【解决方案3】:

要回答您的第一个问题,在 C 语言中您使用 printf(对于文件输出 fprintf)。 IIRC,cout 也有大量的修饰符,但我不会像你最初提到的 fstream 那样提及它们(比 C++ 更以“C”为中心)——


糟糕,错过了 ofstream 指示器,忽略我的“C”cmets 并使用 C++


为了改进您的程序,请务必在进行上述计算时大量使用括号,以 100% 确保按照您希望的方式评估事物(不要依赖优先顺序)

【讨论】:

  • fstream“更以'C'为中心”?这是一个流类,具有
  • 感谢您的提示,非常感谢
  • 山姆,你的评论和我的编辑一定在邮件中交叉了 :)
【解决方案4】:

一般来说,写入输出的方法有 printf、wprintf 等。

如果是文件,这些方法被命名为 fprintf_s、fsprintf_s 等。

请注意,“_s”方法是以前格式化方法的新安全变体。您应该始终使用这些新的安全版本。

例子参考: http://msdn.microsoft.com/en-us/library/ksf1fzyy%28VS.80%29.aspx

请注意,这些方法使用格式说明符将给定类型转换为文本。例如 %d 充当整数的占位符。同样 %f 表示双精度。

【讨论】:

    【解决方案5】:

    只需在输出流上使用&lt;&lt; 运算符:

    #include <fstream>
    
    int main() {
      double myNumber = 42.5;
      std::fstream outfile("test.txt", std::fstream::out);
      outfile << "The answer is almost " << myNumber << std::endl;
      outfile.close();
    }
    

    【讨论】:

      【解决方案6】:

      我遇到了完全相同的问题,ofstream 正在输出字符串,但一到达变量就停止了。通过更多的谷歌搜索,我在论坛帖子中找到了这个解决方案:

      在 Xcode 3.2 下,基于 stdc++ 项目模板创建新项目时,Debug 配置的目标构建设置会添加与 gcc-4.2 不兼容的预处理器宏: _GLIBCXX_DEBUG=1 _GLIBXX_DEBUG_PEDANTIC=1

      如果您希望 Debug/gcc-4.2 正确执行,请销毁它们。

      http://forums.macrumors.com/showpost.php?p=8590820&postcount=8

      【讨论】:

        猜你喜欢
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 2016-06-10
        • 2019-12-02
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多