【问题标题】:Output to file c++输出到文件 c++
【发布时间】:2012-12-14 08:41:23
【问题描述】:

非常简单的程序,不知道为什么它不起作用:

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

using namespace std;

int main ()

{
ofstream myfile ("test.txt");
if (myfile.is_open()) 
{
    for(  int i = 1;  i < 65535;  i++  )

     {
     myfile << ( "<connection> remote 208.211.39.160 %d udp </connection>\n", i );
     }
    myfile.close();
}
  return 0;
}

基本上它应该打印该句子 65535 次,然后将其保存到 txt 文件中。但是 txt 文件只有一个从 1 到 65535 的数字列表,没有文字或格式。有任何想法吗?感谢您的帮助。

【问题讨论】:

  • 逗号运算符:不知何时引起混乱!
  • 在这里阅读如何使用逗号运算符。 stackoverflow.com/questions/12824378/…
  • 谢谢它现在可以工作了,但是我犯了一个错误,我最多只能有 64 个数字,而且它们需要在 10001 和 65535 之间随机。有人知道吗?

标签: c++


【解决方案1】:

如果您想连接输出,只需将您的数据通过管道传输到两个 &lt;&lt; 运算符,如下所示:

myfile << "<connection> remote 208.211.39.160 %d udp </connection>\n" << i;

请注意,在这种情况下插值不起作用,因此如果要将 i 变量放在字符串的中间,则必须手动拆分:

myfile << "<connection> remote 208.211.39.160 " << i << " udp </connection>\n"

或者在输出之前应用某种其他的插值格式。

问题

问题存在于您的代码中,因为在 C++ 中,(a, b)(逗号运算符)返回 b。因此,在您的代码中,这意味着您只是将 i 写入文件。

【讨论】:

  • &lt;&lt; 是否像 printf 一样工作?因为我相信他正在使用 printf 语法
  • 不,当然不是。我已经添加了一些内容来澄清这一点。
【解决方案2】:

改变

myfile << ( "<connection> remote 208.211.39.160 %d udp </connection>\n", i );

myfile << "<connection> remote 208.211.39.160 " << i << " udp </connection>\n";

【讨论】:

    【解决方案3】:

    尝试以下方法:

    myfile << "<connection> remote 208.211.39.160 %d udp </connection>\n" << i;
    

    基本上,myfile &lt;&lt; (str , i) 的意思是“评估 (str , i) 并将评估结果写入 ostream myfile”。

    ( "&lt;connection&gt; remote 208.211.39.160 %d udp &lt;/connection&gt;\n", i ) 求值的结果等于i

    看一下逗号操作符说明: http://en.wikipedia.org/wiki/Comma_operator

    【讨论】:

      【解决方案4】:

      您正在使用 printf 语法使用 ofstream 进行编写。其他人已经解释了为什么它不起作用。要修复它,请执行以下操作

      myfile << "<connection> remote 208.211.39.160"<<i<<"udp </connection>\n";
      

      或者如果你想使用 C 风格

      printf( "<connection> remote 208.211.39.160 %d udp </connection>\n", i ); //fprintf to write to file
      

      【讨论】:

      • 如果他打开fstream,他应该如何使用fprintf?我会理解sprintf 的建议。
      • @BartekBanachewicz 很抱歉没有更好地解释,C 风格也意味着 fopen/fclose
      【解决方案5】:

      看起来您正在尝试“printf”和流式传输...

      我认为这更像你想要的:

      myfile << "<connection> remote 208.211.39.160 " << i << " udp </connection>"<<std::endl;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        相关资源
        最近更新 更多