2

我对 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;
}

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

提前致谢。

4

6 回答 6

6

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

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

你能试试这个吗?

于 2009-09-04T10:29:35.567 回答
1

只需使用流写操作符 operator<<,它对 double 有重载定义(在 basic_ostream 中定义)

#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;
于 2009-09-04T10:32:21.897 回答
0

我遇到了完全相同的问题,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

于 2009-12-15T12:26:35.807 回答
0

只需<<在输出流上使用运算符:

#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();
}
于 2009-09-04T10:32:57.027 回答
0

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


哎呀,错过了 ofstream 指示器,忽略我的“C”注释并使用 C++


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

于 2009-09-04T10:31:10.137 回答
0

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

对于文件,这些方法被命名为 fprintf_s、fsprintf_s 等。

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

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

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

于 2009-09-04T10:31:15.627 回答