C++ STL getline读入回车符\r,打印乱码问题

在做 C++ Primer 5th (中文版)练习11.33 单词转换程序 时,程序跑出来的结果和实际结果有偏差。仔细检查发现程序并没有什么逻辑和语法上的错误。

首先交待一下环境

  • 系统:Ubuntu 20.04(安装在Windows 11上)

  • 编译器:gcc 9.4.0

  • 调试器:gdb 9.2

问题

参考C++ Primer 5th 练习11.33的代码。

我用Windows 11的记事本创建了两个txt文件,一个是规则文件word_transformation_bad.txt,一个是要转换的文本文件given_to_transform.txt。j记事本创建的文本文件的默认行尾序列CRLF。(圈起来,后面输入出错就是因为这个!!!)

word_transformation_bad.txt

希望得到的输出:

where are you
why dont you send me a picture
okay? thanks! later

编译后实际输出:

  youe are
  send me a picture
  laters!

可以看到输出内容完全不对(每一行前还有一个空格)。

使用gdb进行调试,将断点打在46行,运行时发现每一个value变量后都有一个\r

map<string, string> buildMap(ifstream &map_file) {
   
    map<string, string> trans_map;			 		 	// 保存转换规则
    for (string key, value;								// key:要替换的单词,value:替换后的内容
            map_file >>
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值