冒皮皮k 2023-06-04 21:30 采纳率: 100%
浏览 20
已结题

C++ get函数一些问题

fstream.get(char* str, streamsize count)

我对这个函数的理解是尝试读取count个字符到str中,遇到换行符结束,但仍将换行符留在缓冲区内。
问题如下:
当缓冲区第一个字符为换行符时,该函数应该直接返回,此时缓冲区第一个字符仍是换行符。我这时再用可以读取换行符的函数应该是可以读取到这个换行符的。

//fstream第一个字符为'\n'
fstream.get(str, 10);
char ch = 0;
ch = fstream.get();
/ch应该是'\n'

我的测试代码如下

img


这是使用的文本文件和结果截图

img

  • 写回答

1条回答 默认 最新

  • Cloud成长者半期 2023-06-04 21:50
    关注

    您的理解是正确的。当从文件中读取第一个字符时,它应该是'\n',而不是您期望的换行符。要解决这个问题,您可以使用fstream对象的peek()函数来获取文件开头的一些字节,然后检查它是否是'\n'。如果是,则可以使用fstream对象的get()函数读取这个字符。例如

    char ch = fstream.peek();
    if (ch == '\n') {
        char ch2 = fstream.get();
        //ch2将是换行符
    }
    
    

    peek函数会将它所读取的字节存储在一个指针中,因此您需要将它与fstream对象的文件偏移量相结合,才能正确地读取文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月4日

悬赏问题

  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView