【问题标题】:C equivalent to c++ cin.peek()C 等价于 c++ cin.peek()
【发布时间】:2012-01-28 03:04:41
【问题描述】:

C 编程中 cin.peek() 的等价物是什么?我需要扫描文件中的“/r”和“/r/n”(这些是 DOS 文件的行尾标记),因此如果当前字符是“/r”,我需要“窥视”下一个字符'

谢谢!

【问题讨论】:

  • 这些也是现代 Windows 系统上的行尾标记,而不仅仅是“旧 DOS”。
  • 如果你想做面向字符的编程,我希望你了解正斜杠和反斜杠之间的区别......

标签: c newline stdin cin peek


【解决方案1】:

ungetc(),当您偷看字符时,它允许您将字符推回(就好像它们还没有被读取一样)。

http://www.zyba.com/reference/computing/c/stdio.h/ungetc.php

【讨论】:

    【解决方案2】:

    作为 read+ungetc() 的替代方法,您可以逐个字符地读取文件并跳过不必要的 '\r' 和/或 '\n' 或对它们执行任何其他特殊处理。一个简单的状态机可以提供帮助。

    【讨论】:

      【解决方案3】:

      尝试:

      char c;
      FILE *fp;
      // opening file, etc.
      if((c = getc(fp)) == '\r')
          ungetc(c, fp);
      

      或:

      char c;
      FILE *fp;
      // opening file, etc.
      fread(&c, sizeof(char), 1, fp);
      if(c == '\r')
      {
          fseek(fp, -1L, SEEK_CUR);
          fwrite(&c, sizeof(char), 1, fp);
      }
      

      如果你需要读取两个值(如“\n\r”),你可以使用一个short来存储它,并用它的数值进行测试

      【讨论】:

        猜你喜欢
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 1970-01-01
        • 2011-09-19
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多