修改Hello World程序向特定的人问好。

#include <iostream>
#include <string> int main()
{ std::string name;
std::cout << "What's your name? ";
std::cin >> name;
std::cout << "Hello " << name << "!" << std::endl; system("pause");
return ;
}

为了输入名字,我们得有一个地方存放名字。这个地方叫做变量。变量是具有名称的对象。反过来,一个对象是计算机的一个类型的内存的一部分。

如果我们希望使用一个变量,我们必须告诉变量的类型和名称。编译器很容易检测出变量名称拼写错误和变量类型错误。

在这个例子中,我们的变量名为name,其类型是std :: string。使用std ::意味着它后面的名称,字符串是标准库的一部分。std :: string有一个关联的头文件,即<string>,所以我们在我们的程序中添加了一个适当的#include指令。

通常,标准库把输出保存在称为缓冲区的内部数据结构中,该缓冲区用于优化输出操作。大多数系统花费大量时间将字符写入输出设备,而不管有多少字符要写入。为了避免响应于每个输出请求的写入开销,库使用缓冲区来累加要写入的字符,并且只有在必要时将其内容写入输出设备才能刷新缓冲区。通过这样做,它可以将多个输出操作组合成单个写入。

有三个事件导致系统刷新缓冲区。首先,缓冲区可能已满,在这种情况下,标准库将自动刷新缓冲区。其次,标准库可能被要求从标准输入流中读取。 在这种情况下,标准库将立即刷新输出缓冲区,而不必等待缓冲区变满。第三,人工手动刷新缓冲区。

当程序运行到 std::cout << "What's your name? "; What's your name?被写入到缓冲区。接下来,我们用cin读取,这个读取刷新了缓冲区,我们就能看到What's your name?的提示。我们最后一个操作 std::cout << "Hello " << name << "!" << std::endl,开始都被写入到缓冲区,当程序运行到std::endl,标准库来刷新缓冲区。

3.Strings 字符串如何工作?----对缓冲区的理解。的更多相关文章

  1. Windows Azure 网站:应用程序字符串和连接字符串的工作原理

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...

  2. C++编程对缓冲区的理解

    本文转自:http://www.vckbase.com/index.php/wv/1592 什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空 ...

  3. C++编程中对缓冲区的理解(OS默认4096大小的缓冲区,有例子,很形象)

    什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出 ...

  4. 【C# IO 操作 】编程对缓冲区的理解

      什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是 ...

  5. 安全的字符串拷贝strcpy_s的实现与理解

    在C标准库中提供了字符串拷贝函数strcpy,而微软则为为它提供了一个更安全的版本strcpy_s,其函数原型为 errno_t __cdecl strcpy_s( char* _Destinatio ...

  6. [LeetCode] Add Strings 字符串相加

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...

  7. [LeetCode] Multiply Strings 字符串相乘

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  8. Codeforces Round #358 (Div. 2) D. Alyona and Strings 字符串dp

    题目链接: 题目 D. Alyona and Strings time limit per test2 seconds memory limit per test256 megabytes input ...

  9. 【LeetCode每天一题】Multiply Strings(字符串乘法)

    Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and ...

随机推荐

  1. 安卓开发第一记 android stdio 安装后 新建测试项目报错

    Failed to resolve:com.android.support:appcompat-v7:报错处理   你在使用android studio时是否也出现过上图的报错,你还在为它的出现烦恼? ...

  2. Spring源码学习之:ClassLoader学习(5)-自测

    [一]测试目的(ClassLoader的作用) 1:测试涉及三个jar包,nonbankcard-configure-0.0.1-SNAPSHOT.jar,nonbankcard-persist-0. ...

  3. ZenCoding[Emmet]語法簡介【轉】

    快速指南 下面是一些常用的Zen Coding功能,目前VS2013的Web Essentials插件已经支持. '#' 创建一个id特性 '.' 创建一个类特性 '[]' 创建一个自定义特性 '&g ...

  4. Ubantu中安装sublime

    Sublime-text-3的安装步骤   添加Sublime-text-3软件包的软件源 sudo add-apt-repository ppa:webupd8team/sublime-text-3 ...

  5. Sql 中Collate用法

    今天查询sqlite的时候需要不区分大小写,查了下文档,需要使用collate nocase.顺便学习下collate的用法. collate在sql中是用来定义排序规则的.排序规则其实就是当比较两个 ...

  6. 有关Botton的用法(一)

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content&qu ...

  7. linux 目标文件 bss,data,text,rodata,堆,栈***

    linux目标文件 一个简单的程序被编译成目标文件后的结构如下: 从图可以看出,已初始化的全局变量和局部静态变量保存在 .data段中,未初始化的全局变量和未初始化的局部静态变量保存在 .bss段中. ...

  8. 【转】Jmeter性能测试报告解析

    Jmeter报告解析 1.Aggregate Report 解析 Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告 ...

  9. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

    SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...

  10. logback高级特性二 异步记录日志

    问题描述: 下图中JProfiler可看出logback的日志输出占了64%的cpu消耗 优化方案: 1. 这部分写日志的代码写了一些报文数据,确实是比较大的字符串.先禁掉控制台输出,生产环境也不需要 ...