C++:为什么 cout 打印回车符以及使用 ifstream 从文件读取的字符串?

2023-12-01

我正在尝试读取文件capitals内容如下:

Tokyo   
33200000
New York    
17800000
Sao Paulo   
17700000
Seoul
17500000
Mexico City
17400000

我用来打印文件内容的代码片段是:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    std::ifstream ifs("capitals");
    std::string s, s2;

    while (getline(ifs, s)) {
        getline(ifs, s2);
        cout << s  << ": "
             << s2 << endl;
    } 

    return 0;
}

但是,我得到的输出如下:

code_master5@Brahmaastra:~$ g++ test.cpp -std=c++17
code_master5@Brahmaastra:~$ ./a.out 
: 33200000
: 17800000  
: 17700000  
: 17500000
: 17400000y

预期输出应采用以下形式:

Tokyo: 33200000

原始输出的最后一行表明 cout 正在打印回车打印城市名称后。为什么会发生这种情况?

EDIT 1: 正如建议的@Qubit我使用 pop_back() 删除最后一个字符。更改后的代码是:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    std::ifstream ifs("capitals");
    std::string s, s2;

    while (getline(ifs, s)) {
        s.pop_back();
        getline(ifs, s2);
        s2.pop_back();
        cout << s  << ": "
             << s2 << endl;
    } 

    return 0;
}

现在的输出是:

Tokyo   : 33200000
New York    : 17800000
Sao Paulo   : 17700000
Seoul: 17500000
Mexico City: 17400000

这些额外的空间是什么?

EDIT 2现在问题已经解决了。正如建议的@lubgr,发生这种情况是因为文件以 Windows 样式存储,每行末尾带有 \r。所以,我安装了dos2unix并运行以下命令:

code_master5@Brahmaastra:~$ dos2unix capitals 
dos2unix: converting file capitals to Unix format... 

然后,正如 @codekaizer 进一步解释的那样,我保留了这些 pop_back() 调用以删除尾随的 '\t' 字符以获得预期的输出。


这是由您造成的capitals文件中,它的行以回车符结尾(Windows 样式),但是当您在非 Windows 终端中打印它时,这些回车符未得到正确处理。你有两个选择,要么运行

dos2unix captials

这将从行结尾中删除所有回车符,或者按照 @Qubit 在注释中的建议,您可以删除 while 循环中的最后一个字符:

while (getline(ifs, s)) {
    getline(ifs, s2);
    s.pop_back();
    s2.pop_back();

    /* ... */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:为什么 cout 打印回车符以及使用 ifstream 从文件读取的字符串? 的相关文章

  • 获取数组变量的地址是什么意思?

    今天我读到了一段让我很困惑的 C 代码片段 include
  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 类中不允许使用不完整类型,但类模板中允许使用不完整类型

    以下为无效代码 struct foo struct bar bar x error field x has incomplete type struct bar int value 42 int main return foo x valu
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 程序从windows启动? C#

    So 我已经构建了一个只需打开一个新程序的winforms winform中的代码是这样的 如果有人需要 Process a Process a Process Start notepad exe BUT 我需要知道如何让程序随 Windo
  • 整数数组中具有最大总和的子序列[重复]

    这个问题在这里已经有答案了 给定一个整数数组 如何找到两个索引 i 和 j 使得子数组中从索引开始和结束的元素之和最大化 在线性时间内 简单的 假设你得到了数组a 首先 计算数组s where s i a 0 a 1 a i 您可以在线性时
  • 添加按钮到 QVideoWidget

    每个人 我尝试为 QMediaPlayer 元素设置点击属性 但我找不到制作它的模式 如果我尝试将按钮放在视频前面 该按钮会放在视频后面 即使使用 button gt raise videoWidget gt lower 如果我按下按钮全屏
  • 如何在没有 2^n if 语句的情况下启动具有许多布尔参数的函数模板

    我有一个 CUDA C 代码 专门出于性能原因而使用函数模板 这样该函数将只执行它需要执行的操作 而不是不断加载和读取布尔值来检查它是否需要执行操作 所有模板参数都是布尔值 在启动内核时 CPU 检查布尔值并启动适当的 我相信这称为内核模板
  • SQL Server 插入缺失行

    我有下表记录每天的值 问题是有时会缺少几天 我想编写一个 SQL 查询来 归还缺失的日子 使用线性插值计算缺失值 所以从下面的源表中可以看出 Date Value 2010 01 10 10 2010 01 11 15 2010 01 13
  • 将 C# 中的 CPU ID 代码转换为 C++ 中的 CPU ID 代码

    我有这个 C 代码来获取处理器 ID 但我无法将其传递给 C 我尝试了很多 但我真的不能 我刚刚开始使用 C 我希望能够通过以下方式获取 CPU ID C 就像我以前使用 C 一样 这是我在 C 中的代码 public static str
  • 嵌套列表理解以展平嵌套列表

    我对 Python 很陌生 想知道如何使用列表理解来展平以下嵌套列表 并使用条件逻辑 nested list 1 2 3 4 5 6 7 8 9 以下返回一个嵌套列表 但是当我尝试通过删除内部方括号来展平列表时 出现错误 odds even
  • Django 1.7 - makemigrations 未检测到更改

    正如标题所示 我似乎无法进行迁移 该应用程序最初低于 1 6 所以我知道迁移最初不会存在 事实上 如果我运行python manage py migrate I get Operations to perform Synchronize u
  • 如何从 Firefox 扩展程序访问网页数据?

    我已经成功地在 Firefox 中运行了一个自定义的非常基本的扩展 接下来我想做的是 检查用户是否位于所需的网页上 如果是 检查每个回发的页面是否包含包含string 如果找到 启动外部应用程序string范围 我对网页上的 javascr
  • pandas to_sql 方法给出日期列错误

    我有一个如下所示的数据框 df pd DataFrame index pd date range 2014 01 01 periods 10 df date df index map lambda x x strftime d m Y df
  • 预期为“struct Matrix_t *”,但参数类型为“struct Matrix_t *”?_?没有不同

    main c 78 25 erreur assignment from incompatible pointer type Werror main c 81 9 erreur passing argument 2 of matrix mul
  • .Net Socket 不响应远程断开连接?

    我正在编写一个小型 C 客户端应用程序 该应用程序使用 TCP IP 连接将数据发送到远程服务器 我正在使用标准 Net TcpClient 对象 并且希望在客户端保持连接打开状态 因为我定期向服务器提交数据包 但是 服务器可能会关闭连接
  • 数据源上的 save() 方法不会触发 querySave/postSave 事件

    我的保存按钮使用 SSJS 和一些逻辑 我想保存数据源 所以我使用 document1 save 脚本有效 但 querySave postSave 代码未执行 唯一的解决方法是使用简单操作并将按钮事件划分为 执行脚本 保存文档 简单操作
  • 存储过程不存在,是吗?

    我遇到一个问题 我有一个数据库连接 我在其中运行存储过程 这个相同的连接用于创建前面所说的存储过程 当我稍后尝试调用给定的存储过程时 我收到以下消息 找不到存储过程 dbo yaf prov upgrade 问题是它确实存在于数据库中 而且
  • 如何以管理员权限启动 Windows 服务

    我有自己的应用程序服务器 它是与 sql 服务器通信的 Windows 服务 在某些情况下 sql 服务器服务停止 所以我通过这段代码声明 ServiceController sc new ServiceController MSSQL S
  • C 代码的 x86 反汇编生成:orq $0x0, %(rsp)

    I have written the following C code 它只是分配一个包含 1000000 个整数和另一个整数的数组 并将数组的第一个整数设置为 0 我编译这个使用gcc g test c o test fno stack
  • 使用自定义 [required] 属性时使用客户端验证

    在这个项目中 我们不使用默认的数据注释属性System ComponentModel DataAnnotations命名空间 但构建了自定义属性 所以我们确实放置了一个 required 属性上的属性 但它是自定义构建的 对于服务器端验证
  • 在 WKWebView 中操作粘贴内容

    我需要操作粘贴到 WKWebView 从任何源 中的文本 运行可能需要一些时间的异步操作 我最初的想法是使用 Javascript 和 WKWebView 配置来获取onpaste event WKUserContentController
  • 此平台不支持 .whl

    我想安装hdbcli 2 3 99 cp27 cp27m win amd64 whl我已保存到本地驱动器 我正在使用下一个 PS C Users i326707 PycharmProjects hdbcli gt python Python
  • C++:为什么 cout 打印回车符以及使用 ifstream 从文件读取的字符串?

    我正在尝试读取文件capitals内容如下 Tokyo 33200000 New York 17800000 Sao Paulo 17700000 Seoul 17500000 Mexico City 17400000 我用来打印文件内容的