endl 和 cout 后的行距?

2024-03-03

我注意到在下面的代码中:

    cout << "Please enter your number: ";
    cin >> Number;
    cout << "Is this spaced";

C++ 命令窗口中的输出自动将“Is this spaced”放在下一行中。它将后面的任何内容隔开cin行而不需要使用流操纵器(为什么这被称为流操纵器?)endl。而如果我只有代码:

    cout << "Please enter your number: ";
    cout << "Is this spaced";

它不会自动用“Is this spaced”来分隔行。相反,两条线连接在一起。我很想知道为什么会出现这种情况,因为我一直认为你需要endl为了创造一个新的空间线。

Thanks!


cout << "Please enter your number: ";
cin >> Number;
cout << "Is this spaced";

这里面的内容远比表面上看到的还要多。std::cout and std::cin是 - 默认情况下 -tied溪流。这意味着std::cout每当std::cin被要求输入。这就是为什么你一定会看到"Please enter your number: "在程序暂停等待您输入之前。当然,在大多数操作系统中,您可以在程序等待之前开始输入 - 它会将其回显到终端并记住它以提供给std::cin后来:当您使用管道调用程序时也会发生这种情况,例如:

echo "123" | the_program

输入可用时the_program开始跑步,但坐在那里cin >> Number;尝试解析。但在这种情况下,终端程序没有键盘输入来回显,因此“123\n”序列不会回显到两行输出之间的屏幕上 - 没有换行符“\n”,您的输出将全部出现在一行上。

如果您想从键盘读取内容而不需要键盘输入将光标移动到下一行,那么最好使用 ncurses 或一些类似的库。这些库可以使用适合您的终端的转义序列(如果可用)来根据您的喜好重新定位光标。如果您要支持的终端范围非常有限(例如,只有 xterm 兼容的终端、VT220 或 Windows 命令 shell),那么您自己编写代码可能是实用的。通常也可以禁止打印键盘输入,但用户无法看到自己键入数字。另一种选择是将终端设置为支持逐字符输入读取的输入模式(某些终端默认为逐行读取,因此在按下回车键之前您无法看到字符) - 将其与上方的抑制回声相结合程序可以打印键入的数字,但不能打印换行符。

另外,最好用换行符结束程序的输出,因为否则某些调用环境不会显示最后一行。而且,这有点有争议,但恕我直言,最好不要使用std::endl当你不需要刷新输出时 - 只需使用\n并让 C++ iostream 库缓冲多行并将它们以有效大小的块写入操作系统。

冲水的解释

假设你有一个这样的程序:

std::string h = "hello ";
std::string w = "world";

std::cout << h;
std::cout << w << '\n';

在某个阶段,程序需要告诉操作系统(Linux、Windows 等)要打印的文本,让它将其发送到 shell/cmd 提示符(这可能会将其发送到屏幕上并将其放入缓冲区中)用于滚动条等)、文件或其他内容。从总体上看,程序告诉操作系统执行此类操作的速度很慢,因此如果程序记住“hello”,添加“world”和\n(换行符),然后一次将“hello world\n”发送到操作系统。程序内数据存储和串联称为缓冲,而将数据从缓冲区写入操作系统的行为称为刷新。

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

endl 和 cout 后的行距? 的相关文章

  • UWP 应用中的设备 ID(阈值 1)

    在 Phone 8 1 中 您可以使用以下方式获取设备 ID硬件识别 https stackoverflow com questions 23321484 device unique id in windows phone 8 1 2332
  • 如何让 CMake 为目标安装 PDB 文件

    如何让 CMake 安装调试 Visual Studio 生成的 DLL 文件和 EXE 文件所需的配套 PDB 文件 我已经挣扎了一段时间 试图找到这个问题的一个好的答案 我现在认为我找到了一个 使用安装文件命令
  • 在 C/C++ 中读取和写入二进制文件的中间部分

    如果我有一个大的二进制文件 假设它有 100 000 000 个浮点数 C 或 C 有没有办法打开文件并读取特定的浮点数 而不必将整个文件加载到内存中 即我如何快速找出第 62 821 214 个浮点是什么 第二个问题 有没有办法更改文件中
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • DPI 图形屏幕分辨率像素 WinForm PrintPageEventArgs

    对于运行我的应用程序的任何显示器 Dpi 点与像素有何关系 int points Screen primary public Form1 InitializeComponent points 1 primary null void OnPa
  • ReportViewer“缺少 URL 参数:名称”

    在一个网络应用程序中 我正在处理 ReportViewer 时不断出现错误 缺少 URL 参数 名称 我找到了原因 但没有找到解决方案 导致报告查看器出现异常的 url Reserved ReportViewerWebControl axd
  • 如何获得字符串的所有字谜

    我试图找到一个字符串的所有可能的字谜并仅使用递归将它们存储在数组中 我被困住了 这就是我所拥有的一切 int main const int MAX 10 string a ABCD string arr 10 permute arr a 0
  • 是否可以在三元表达式上只放置一个选项?

    我只是好奇这是否可能 或者是否有办法使它成为 C 的有效语法 expression value do nothing here or put some empty block like SomeClass SomeMethod Edit 为
  • 如何检测机器是否加入域?

    如何检测计算机是否已加入 Active Directory 域 相对于工作组模式 如果没有必要的话 不要用 pinvoke 来愚弄 参考System DirectoryServices 然后调用 System DirectoryServic
  • 如何在 MSBuild NuGet 包生成的 .nuspec 中注入自定义依赖项

    我正在尝试迁移到使用 MSBuildPack支持使用 csproj 生成项目 NuGet 包 其中在开发过程中使用本地 dll 来构建项目 但在使用 MSBuild 打包 项目时需要替换 交换它们以引用生成的 nuspec 中的外部 NuG
  • 弹出窗口或弹出窗口显示附加信息

    我想在我的应用程序顶部显示带有附加信息的弹出窗口 我的信息是Listview大约 500 个项目我都尝试过 有问题flyout gt 它里面可能有scrollViewer 所以我的列表视图不能正确虚拟化 其他一切都可以 有我的代码 Flyo
  • 如果键不是映射中的初始化键,STL map[key] 返回什么? [复制]

    这个问题在这里已经有答案了 这是一些示例代码 include
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 提取 zip 文件时 Parallel.ForEach 抛出异常

    我正在阅读 zip 文件的内容并尝试提取它们 var allZipEntries ZipFile Open zipFileFullPath ZipArchiveMode Read Entries 现在 如果我提取使用 Foreach 循环
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • WCF - IsOneway 的行为不像 Oneway 操作

    我已在服务的某些方法上定义了 OneWay 属性 但它们的行为并不像 Oneway 调用 我的客户等待呼叫完成并从服务返回 我假设单向操作是非阻塞操作 并且客户端不关心被调用函数会发生什么 它只是调用并忘记它 这是对的吗 问题 调用 Ope
  • 提高批量请求的野兽内存使用率

    我运行这个boost beast 客户端 异步 ssl http www boost org doc libs develop libs beast example http client async ssl http client asy
  • 为什么在嵌套类上调用方法时不调用父类的静态构造函数?

    给出以下代码 为什么在 Main 的第一行之后没有调用 Outer 的静态构造函数 namespace StaticTester class Program static void Main string args Outer Inner

随机推荐

  • setPreferredSize 有哪些副作用?

    我有包含多个面板的窗口 我无权访问窗口代码 我只能修改面板的代码 我从面板上移除了一些组件 窗户的尺寸缩小了 但窗口太小 无法正确显示所有内容 我添加了行setPreferredSize getPreferredSize 现在窗口大小合适
  • 附近 API 的 Strategy.DISTANCE _TYPE_ EARSHOT 似乎并不限制消息接近度

    我正在使用新的附近 API https developers google com nearby https developers google com nearby 在设备之间短距离 约 5 英尺 发送消息 我已将策略距离类型设置为 DI
  • 如何以编程方式在 jupyter 笔记本中添加幻灯片单元格元数据?

    Jupyter 笔记本有一种可视化单元格元数据的方法 以便您能够使用以下命令参数化当您将笔记本导出到幻灯片时单元格的外观nbconvert Example 例如 我想以编程方式将该元数据添加到单元格中 而不使用 GUI 以便我可以自动创建幻
  • 在 sparql IN 子句中使用另一个 sparql

    我正在使用 SPARQL 我想知道是否可以在 in 子句中放入 sparql 更具体地说 我需要获取具有此 sparql 查询特定条件的实体 s1 s2 s1 在某个字段上的聚合值大于 5 select s1 x s2 WHERE s1 r
  • 没有模型的 MVC 3 验证

    我有一个关于 mvc3 验证的问题 内置的验证看起来很棒 然而 在一种情况下 我不得不使用 javascript 导致它的外观和感觉不一致 警报窗口与漂亮的红色文本 我们有一个表单 其中包含一些供用户输入的字段 提交后 一些 ajax 代码
  • 在我的 WPF 应用程序中捕获没有焦点的按键事件

    我在 WPF 中开发了一个屏幕键盘 我需要夺取钥匙 新闻事件 通过键盘 以跟踪 Caps Lock Shift 等等 无论它们是否被按下 请注意 当任何其他应用程序时 我的应用程序会失去焦点 比如记事本 被打开 谁能建议如何在 WPF 中实
  • 写入会话数据失败(memcache)

    我注意到一个间歇性的我们的 Memcached 会话处理程序存在问题 出现的错误是 未知 无法写入会话数据 memcache 请确认 session save path 的当前设置是正确的 Notes 对于不同的用户来说 这似乎是一个间歇性
  • 具有多个元素的数组的真值是不明确的。 numpy 错误

    具有多个元素的数组的真值是不明确的 使用 a any 或 a all 我收到此代码的上述错误 几个月前我没有遇到这种错误 但我现在明白了 我该如何解决这个问题 t np linspace np zeros 2 2 np ones 2 2 2
  • 创建 sqlite3.lib 文件/在 Visual Studios 中使用 sqlite3 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一生都无法编译这段代码 我让它在所有其他计算机上运行良好 但我必须切换到 Windows 计算机 并且我试图将 sqlite3 添加回包
  • 当结构体开头的名称和结构体末尾的名称不同时,这意味着什么?

    当结构体开头的名称和结构体末尾的名称不同时 这意味着什么 例如 struct book char title 50 int year boo 或者例如 typedef struct book char title 50 int year b
  • 如何为库编写 CMake 安装?

    这是我的尝试 IF NOT WIN32 INSTALL TARGETS LIB INSTALL DIR tinyscheme nix BINARY DIR libtinyscheme so INSTALL TARGETS tinyschem
  • 第一个 Android 密钥库证书过期后会发生什么?

    就目前我所记得的 10 years是在 Eclipse 中创建密钥库时的默认设置 我认为 大约 5 年前 Android 开发已经成为主流 所以我预计很多应用程序在 5 年内将无法在 Play 商店中更新 到目前为止 我还没有找到如何 延长
  • 如何在微调器的底部添加一行,就像android中的edittext一样

    你好 我正在制作我正在使用的演示应用程序EditText其中底部出现一条线是可以的 但在旋转器的情况下则不然 这怎么可能做到 布局 xml
  • 如何添加表格作为标题?

    我正在与iTextSharp尝试向生成的 PDF 添加页眉和页脚 但是 如果我尝试添加宽度为页面 100 的页眉 则会遇到一些问题 所以我做了以下事情 1 我创建了一个名为PDF页眉页脚扩展了 iTextSharpPdfPageEventH
  • 带有 javascript_include_tag 的 Ruby On Rails 错误

    所以 据我所知 我的问题似乎是 ruby 没有加载所有的 javascript 文件 因为我没有收到确认消息 并且 link to with method delete 对我没有任何作用 使用提供给我的默认设置rails new views
  • 如何使用 xlrd 版本 1.1.0 读取 Excel 中的字体和背景颜色

    实际上我使用的是xlrd模块1 1 0版本 但我不知道如何读取单元格属性 如背景颜色 字体以及单元格是否被锁定 我尝试使用 import xlrd book xlrd open workbook sample xls formatting
  • 如何为我的 C# XNA 游戏制作 GUI? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的游戏有基本功能 可以通过命令行玩 但我想在它上面放一个 GUI 它是一款使用 C 和 XNA 框架编写的平台游戏 我用谷歌搜索并找
  • Tridion DTAP 澄清 - 我需要多少个内容交付设置?

    我询问了 Tridion DTAP 的开发人员设置 开发 测试 验收和生产 在另一个问题中 https stackoverflow com questions 11166754 proper dtap setup for content d
  • 使用 Python + Pylons 进行错误处理

    使用 Python Pylons 处理错误的正确方法是什么 假设用户通过表单设置密码 当通过控制器传递给模型类时 会抛出错误 因为密码太短 应如何处理该错误 以便在网页上显示错误消息 而不是整个脚本终止于错误页面 控制器本身是否应该有任何错
  • endl 和 cout 后的行距?

    我注意到在下面的代码中 cout lt lt Please enter your number cin gt gt Number cout lt lt Is this spaced C 命令窗口中的输出自动将 Is this spaced