字符串的输入,是学习c++的一个重点,也是一个极富有细节意味的知识点,如果你不了解这些细节,你可能会在写程序时犯错而一脸懵逼不知所措。

与此同时,我们要了解c++缓冲区的概念,程序的输入都建有一个缓冲区。输入的过程大概是这样的,一次输入结束,键盘会向缓冲区存入数据,而相应的读取函数会从缓冲区读取,我们来用具体的代码来演示一下缓冲区具体怎么工作;

仔细看上述代码,我的代码里定义了四个char类型的字符串,并且有cin输入,但是当我们输入一个具有空格的字符串时,直接输出了而忽略了人为的继续输入,原因是什么呢?

现在仔细考虑输入流的概念,当我们输入第一串字符串时,我个人理解的是,cin此时没有起作用,我们只是简单的把字符(包括空格,TAB,换行)存到输入流里,当我们按下ENTER(换行)停止键盘向输入流输送数据,然后cin输入函数开始从输入流取数据。

对于cin来说,它会直接从缓冲区读取,当遇到空格,TAB,换行符时,结束输入,正如上述代码所示,我们的cin>>a从输入流提取数据,hereisa提取完后,遇到一个空格,提取结束,然后是cin>>b,cin>>c,cin>>d同样的操作。于是我们看到上述的输出。

cin.get()和cin.getline()两个函数及其相似,大多数情况我们可以将其二者混用,它们的输入可以输入空格,TAB,但遇到空格时结束输入,他们的区别是 getline剔除换行符,而cin.get()则保留换行符。我们看一段代码的测试及结果:

通过上述两段代码,我们看到,对于cin.get()来说,他是保留空格符的,也就是说,他会把空格符保留下来,并且它本身遇到空格符就停止了,然后保留下来的空格符就被下一个读取函数读取了,等价于下个函数提取数据时直接遇到换行符,就直接结束了;而cin.getline()则不同,它别具一格,它英俊潇洒,它遇到换行符时它直接结束,可以把它看成狼人杀的猎人,它死了,它还要带走一个,然后它带走了空格符,它把空格符剔除了,下面的输入丝毫不受影响。

这些c++方面的输入输出,应该说是最基本的知识,但是基本功不扎实,怎么能写出高鲁棒的代码呢?

c++字符串的输入的思考的更多相关文章

  1. Lua 用指定字符或字符串分割输入字符串,返回包含分割结果的数组

    // 用指定字符或字符串分割输入字符串,返回包含分割结果的数组 // @function [parent=#string] split // @param string input 输入字符串 // ...

  2. C++中的字符串的输入输出函数、空字符与空格的区别、字符变量赋值和字符串初始化

      一.字符串输入输出函数 1.  cin.get()   逐个字符输入输出 2.  cin 可以将整个字符串一次性输入,但是,cin将空格.Tab和回车键,因此不能用于数组的一次性输入. 注意:ci ...

  3. Oracle 在字符串中输入单引号或特殊字符

    -- Start 字符串是用单引号括起来的,如果想在字符串中输入单引号该怎么办呢?有两种方法. 方法一:是用两个单引号代表一个单引号 SELECT 'I''m Shangbo' FROM DUAL; ...

  4. <CPP学习 第二天> 字符串的输入 及 String类

    今天简单的学习了字符串的输入以及C++的String类. 1.面向行的输入: getline(); getline()函数读取整行,通过回车键输入的换行符来确定输入结尾.要调用这种方法,可以使用cin ...

  5. 字符串的输入问题 C++

    C++中,初学时最常用的输入字符的方式为cin,但是,cin是如何确定已经完成了字符串的输入了呢?由于不能通过键盘输入空字符("\0"),因此cin需要用别的方法来确定字符串的结尾 ...

  6. [原创]C++带空格字符串的输入问题

    字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结. C++用cin输入的时候会忽略空格以后的字符,比如 char a[100]; cin ...

  7. C语言基础(9)-字符串格式化输入和输出

    1.字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 2.printf函数,putchar函数 putchar输出一个char printf是输出一个字符串 prin ...

  8. prmopt 提示框接收字符串,输入后按确定弹出警告框,警告内容为逆序的字符串

    虽然已经找到offer,但因为公司还没安排实习,所以在学校的时间多了很多.好吧,这段时间我用来备考四级啦(好悲催,还没过),然后这一天,闲着无聊,就帮妹妹看了这样子一道题目啦. 题目内容: 编制一个从 ...

  9. C/C++中字符串的输入问题

    standard C I/O 头文件:#include <stdio.h> . getchar() 原型:int getchar(void); 功能:从标准输入获取并返回下一个字符,并释放 ...

随机推荐

  1. 虚拟机下安装ubuntu系统

    前期准备工具; 1,Oracle VM VirtualBox虚拟机 下载地址:http://pan.baidu.com/s/1miSaGvm 密码:c3dy 2,ubuntu系统文件 下载地址:htt ...

  2. [原创] 绿色单文件封装程序GreenOne V3.0

    1.原理 将包含可执行文件的多个文件 调用Winrar,创建自解压格式压缩文件 设置高级自解压选项中的文本和图标,设置解压后运行的文件为选中的可执行文件. 这种创建单文件封装其实也就是一个Winrar ...

  3. for循环之初学者N多算法小练习

    for循环之初学者N多算法小练习 显示1到100的数,每行显示5个. for (int i=1;i<=100;i++){     if (i%5==0){         System.out. ...

  4. Android打开其它应用程序

    PackageManager pm = getPackageManager(); Intent i = pm.getLaunchIntentForPackage(packageName); start ...

  5. Gulp和webpack的区别,是一种工具吗?

    疑问:gulp和webpack 什么关系,是一种东西吗?可以只用gulp,不用webpack吗 或者反过来? 它们的区别和概念 ------------------------------------ ...

  6. weblogic java.lang.OutOfMemoryError: PermGen space 问题解决方法

    文章转自:http://blog.csdn.net/cuihaiyang/article/details/6679735 最近安装了WebLogic10.3.4,测试在weblogic上部署项目,没过 ...

  7. Linux:PS命令详解与使用

    要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占 ...

  8. 全国各省市GeoCoord SQL文件(不包括区县)

    /* Navicat MySQL Data Transfer Source Server : 192.168.0.234 Source Server Version : 50543 Source Ho ...

  9. MACD指标

    MACD(Moving Average Convergence)平滑异同移动平均线 MACD指标有双移动平均线发展而来,由快速移动平均线减去慢速移动平均线,当MACD从负数转向证书,是买入信号,从正数 ...

  10. GreenDao 使用二

    1.创建一个实体类 1 Entity note = schema.addEntity("Note"); 默认表名就是类名,也可以自定义表名 1.dao.setTableName(& ...