Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文本文件和普通文件中的Eol是什么? 现在我对C++中的行尾字符感到很困惑,我知道文本文件有一个行标记的结尾,它设置了读一行的移位限制,它是一个单移位操作符(>>)。数据连续读取,直到EOL字符不被读取,而在文本模式回车(CR)中打开文件。转换为CRLF,这是下线标记,因此,如果我在文本中添加空格,它将作为下线标记,因为它会这样做_C++ - Fatal编程技术网

文本文件和普通文件中的Eol是什么? 现在我对C++中的行尾字符感到很困惑,我知道文本文件有一个行标记的结尾,它设置了读一行的移位限制,它是一个单移位操作符(>>)。数据连续读取,直到EOL字符不被读取,而在文本模式回车(CR)中打开文件。转换为CRLF,这是下线标记,因此,如果我在文本中添加空格,它将作为下线标记,因为它会这样做

文本文件和普通文件中的Eol是什么? 现在我对C++中的行尾字符感到很困惑,我知道文本文件有一个行标记的结尾,它设置了读一行的移位限制,它是一个单移位操作符(>>)。数据连续读取,直到EOL字符不被读取,而在文本模式回车(CR)中打开文件。转换为CRLF,这是下线标记,因此,如果我在文本中添加空格,它将作为下线标记,因为它会这样做,c++,C++,现在我创建了一个普通文件,即没有.txt的文件 乙二醇 现在,在这种情况下,什么是eol标记文件名末尾的“.txt”只是一种约定。它只是文件名的一部分 它并不意味着文件有任何神奇的特性,而且它肯定不会改变操作系统内核或文件系统驱动程序处理文件的方式 简言之,有什么区别无。 我知道文本文件有一个行尾标记,用于设置单个移位运算符(>>)读取的行的限制 这是不正确的 持续读取数据,直到不显示下线字符 也不正确。某些操作系统(如Windows IIRC)将EOF(而非EOL!)字符注入流中,以向调用的

现在我创建了一个普通文件,即没有.txt的文件 乙二醇

现在,在这种情况下,什么是eol标记文件名末尾的“.txt”只是一种约定。它只是文件名的一部分

它并不意味着文件有任何神奇的特性,而且它肯定不会改变操作系统内核或文件系统驱动程序处理文件的方式

简言之,有什么区别无。


我知道文本文件有一个行尾标记,用于设置单个移位运算符(>>)读取的行的限制

这是不正确的

持续读取数据,直到不显示下线字符

也不正确。某些操作系统(如Windows IIRC)将EOF(而非EOL!)字符注入流中,以向调用的应用程序表示没有更多数据可读取。其他操作系统甚至不这样做。但在这两种情况下,在实际文件的末尾都没有实际的EOF字符

在文本模式下打开文件时,回车符(CR)转换为下线标记CRLF

这种转换可能发生,也可能不会发生,而且,无论哪种方式,EOL都不是EOF

如果我在我的文本中添加空格,那么它会像eol maker一样工作,因为它会

这是一个消极的,明星的命令

我不知道你是从哪里得到这些东西的,但你已经犯了很大的错误。我建议从亚马逊中得到一个关于计算机操作系统如何工作的好的、经过同行评审的、很好的推荐书。

< P>在C++中使用提取运算符>读取字符串时,默认是跳过空格。 如果要逐字记录整行内容,请使用
std::getline

典型的输入回路是:

int main(void)
{
  std::string text_from_file;
  std::ifstream input_file("My_data.txt");
  if (!input_file)
  {
    cerr << "Error opening My_data.txt for reading.\n";
    return EXIT_FAILURE;
  }
  while (input_file >> text_from_file)
  {
    // Process the variable text_from_file.
  }
  return EXIT_SUCCESS;
}
int main(无效)
{
std::来自_文件的字符串文本_;
std::ifstream输入_文件(“My_data.txt”);
如果(!输入_文件)
{
cerr>文本(来自文件)
{
//处理_文件中的变量文本_。
}
返回退出成功;
}

许多旧的大型机操作系统都需要所有数据文件的记录结构,而对于文本文件,这些数据文件都源于一个Hollerith(punch)有80列的卡片,通过磁盘文件记录、磁带、输出穿孔卡片组和行打印机行忠实地保存。由于记录结构要求每条记录有80列(通常用空格填充),因此不使用行尾。在后来的几年(1960年代以上),具有最大列数为80的可变长度记录变得很流行。今天,即使是OpenVMS也仍然要求文件创建者指定文件格式(顺序、索引或“流”)和记录大小(固定、可变),其中必须提前指定最大记录大小

在现代计算时代(实际上是从Unix开始的),人们普遍认为在数据文件上强制使用结构是一个坏主意。任何程序员都可以自由地对自己这样做,有很多面向记录的数据格式,如编译器/链接器对象文件(.obj、.so、.o、.lib、.exe等)和大多数媒体格式(.gif、.tiff、.flv、.mov、mp3等)

对于文本行的通信,范例是以终端或打印机为目标,为此,应指示行尾。大多数操作系统环境(MSDOS和Windows除外)使用
\n
字符,该字符以ASCII编码为换行符(ASCII 10)代码。MSDO和ilk使用“\r\n”,将其编码为回车符,然后是换行符(ASCII 13,10)。这两种方案都有优点和缺点。但文本文件也可能包含其他控件,通常以特定方式控制设备:

  • 清除部分或全部屏幕
  • 弹出打印机页面、跳过一些行、反向进纸和其他很少使用的功能
  • 建立一个滚动区域
  • 更改文本颜色
  • 选择字体、文本大小、页面大小等
对于这些操作,不需要考虑行尾

此外,以ASCII编码的数据文件,如JSON和XML(特别是带有嵌入式Javascript的HTML),可能没有任何行尾,尤其是当数据被模糊或压缩时


回答您的问题:

我对我用C++结尾的字符很困惑,我知道文本文件有一行结束标记

也许是这样的,也许不是。从C或C++程序的观点来看,写代码< > \n>代码>将运行结束环境指示到行的末尾。系统运行时,运行时环境会发生变化。对于UNIX和Linux,没有翻译发生(尽管写入到类似终端的设备转换为代码> \R\N\/COD>)。。在MSDOS中,“\n”被转换为
\r\n
。在OpenVMS中,“\n”被删除并设置记录的大小。读取进行反向转换

它设置了单个移位运算符(>>)读取的行的限制

没有这样的限制:一个程序可以选择一个字节一个字节地读取数据,也可以忽略行边界

“移位运算符”对于输入或输出数据的文件流是重载的,但与数据流无关。选择这些运算符是为了直观地近似输入/输出,因为它们的运算符优先级较低

持续读取数据,直到不显示下线字符

这一点令人困惑:我想你的意思是直到eol字符出现,这确实是面向行的函数和工作方式

在开幕式上
int main(void)
{
  std::string text_from_file;
  std::ifstream input_file("My_data.txt");
  if (!input_file)
  {
    cerr << "Error opening My_data.txt for reading.\n";
    return EXIT_FAILURE;
  }
  while (input_file >> text_from_file)
  {
    // Process the variable text_from_file.
  }
  return EXIT_SUCCESS;
}