从文件中读取给我额外的新行字符c ++

时间:2018-02-22 02:49:23

标签: c++ char readfile

我尝试从文件中读取char,但是,它总是给我一个或者更多的新行字符(" \ n")。

以下是我的代码:

ifstream file;
file.open(inputfile, ios::binary);

char c;
if(file.is_open()){
  while (!file.eof()) {
      file.get(c);
      if(file.eof()) break;
      cout << c << endl;
  }
}
file.close();

我的文件只是一行txt文件:

1122aaabbbcccc ***

最后没有换行符。 但是我的代码输出是:

1
1
2
2
a
a
a
b
b
b
c
c
c
c
*
*
*


Program ended with exit code: 0

注意最后有两个新行字符。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

运行您使用给定输入发布的代码会为我生成完全相同的结果。获取输入并将其转换为ASCII代码可得到以下输出

49 49 50 50 97 97 97 98 98 98 99 99 99 99 42 42 42 10 10 

最后两个10是正在打印的换行符

答案 1 :(得分:0)

复制程序并将其输出到文件只会产生一个换行符。

对我来说,看起来你的IDE添加了额外的换行符,将程序输出与消息分开,告诉你程序已经结束。

尝试输出到文件或打印一些没有结束换行符的输出,看看是否是这种情况。

答案 2 :(得分:-1)

cout << c << endl;嗯,您正在打印新行(std::endl插入特定于当前操作系统的新行字符)。因此,输出中有新的行字符并不令人惊讶。删除该行的<< endl部分,您将得到您想要的内容:)

编辑:刚刚注意到你只能在最后删除两个新的行字符。在这种情况下:行&#34;程序以退出代码结束:0&#34;,以及之前的两个新行代码根本不会由您的程序打印(或者至少不是来自您的&#39;我发布在这里) - 我甚至测试了你的代码,它打印出你想要的东西。

如果它是由执行程序的任何内容(例如您的IDE)打印的,那么除了在没有该程序的情况下运行之外,您无法对此做任何事情。但是,如果它是由您未在此处发布的代码中的某些内容引起的,则只能通过更改代码的这一部分来修复它。现在有一种方法可以防止打印某些内容而不会阻止对cout的特定调用(或者用于打印该文本的任何内容)。