今天做TJU的OJ ,其中一道题是先读入一个字符串,再读入一个整数,循环往复,直到字符串是空,也就是说回车键结束循环。

但是cin对空格和回车都不敏感,都不影响继续读入数据,所以需要一种新的方式检测回车。

方法一:利用getchar()函数

 1 //**************************将输入的单词逆序输出*************************//
 2 #include <iostream>
 3 #include<stack>
 4 #include <stdio.h>
 5 #include<stdlib.h>
 6 using namespace std;
 7
 8 int main(){
 9     string temp;
10     stack<char> s;//
11     int time;
12     cin >> time;
13
14     for(int i = 0; i < time ; i++){
15
16         while(cin >> temp ){   //把输入赋值
17             for(int j = 0; j < temp.length(); j++){
18                 s.push(temp[j]);
19             }
20
21             while(!s.empty()){
22                 cout << s.top() ;
23                 s.pop();
24             }
25             if (getchar() == '\n')    //检测如果是空格,退出循环;
26                 break;
27             cout << " ";
28         }
29         cout << endl;
30     }
31     return 0 ;
32 }

getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

举个例子:

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 int main(void)
 4 {
 5     char c;
 6     while((c=getchar())!='\n')     //每个getchar()依次读入一个字符
 7         printf("%c",c);            //按照原样输出
 8     printf("\n");
 9     system("pause");
10     return 0;
11 }

  程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字符串都输出来了,咦,你不是说getchar()只返回第一个字符么,这里怎么?

因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,这里开闸动作就相当于调用一次getchar()。我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到满足循环条件退出为止。

例子中循环条件里的'\n '实际上就是你输入字符串后的回车符,所以意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如while ((c=getchar())!='a'),什么意思呢,意思就是遇到字符'a'就停止循环,当然意思是如果你输入“12345a213123 ”那么只会输出到a前面的那个字符,结果是12345。

转载于:https://www.cnblogs.com/JeasonIsCoding/p/9848359.html

C++利用cin输入时检测回车的方法相关推荐

  1. C++中cin输入类型不匹配解决方法

    1 #include <iostream> 2 #include <set> 3 4 using namespace std; 5 6 int main() 7 { 8 int ...

  2. b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

    当在使用浩辰CAD制图软件绘制图纸的过程中,经常要绘制由多个坐标点连接成的曲线时,有什么方便快捷的方法吗?那当然是有的.利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来,就能很容易地画出曲线 ...

  3. C++ 笔记(36)— 接收输入字符串的几种方法

    C++中常见的几种输入字符串的方法如下: std::cin.std::cin.get().std::cin.getline().std::getline().std::gets().std::getc ...

  4. js 数据类型_js中检测数据类型的方法汇总

    回顾一下js中数据类型分为两大类,基础类型和引用数据类型,主要有: 基本数据类型 Number String Boolean Null Undefined Symbol 复杂数据类型 Array Fu ...

  5. c语言cin输入数组,C++基础:各种输入方法总结cin.get()、

    原标题:C++基础:各种输入方法总结cin.get(). 在C++中,各种输入方法还是不少的,而且各有所异,本文做一点简要总结,主要涉及如下内容:cin.cin.get().cin.getline() ...

  6. 利用OpenCV实现人脸检测

    如何在一副图片中检测到人脸,这涉及到计算机图形学中一些非常复杂的计算,如果这些计算都靠程序员自己来编程,那么工作量就相当大.OpenCV全称是Open Computer Vision,是指开放的计算机 ...

  7. omv检查硬盘坏道_用MHDD检测到硬盘出现X坏道时最佳的解决方法!

    原标题:用MHDD检测到硬盘出现X坏道时最佳的解决方法! 硬盘作为电脑的外存,好比人的肚子,系统.文件等都是存在了硬盘里面,当硬盘出现坏道了的话非常影响电脑速度,因此当你的电脑越来越慢了,而且重新安装 ...

  8. 计算机启动时检测硬盘,取消win7电脑开机检测硬盘的方法

    众所周知,win7电脑在开机的时候是会检测很多电脑数据.设备的,虽说这是一种安全的行为,但是同时也会让电脑开机的速度变得很慢,有些不必要的硬盘见测,我们不妨省略了好! 方法一.或者是你在BIOS设置中 ...

  9. 用于在MYSQL中创建存储过程的关键字是_下面选项中,用于在删除存储过程时,检测存储过程是否存在的关键字是_学小易找答案...

    [判断题]秦陵兵马俑三号坑设计的是 军事指挥部 . [单选题]以下不是超塑性变形特点的是:( ) [判断题]如果从表中的外键引用了主表中的值,则不能删除主表中被引用的数据. [单选题]下面选项中,用于 ...

最新文章

  1. SVN 钩子操作-同步更新web目录
  2. C++作用域为类的常量
  3. python:array和list转换以及数组切片
  4. js img图片加载失败,重新加载+断网检查
  5. 产品需求文档 PRD
  6. 榛子云短信-微信小程序60秒倒计时插件
  7. delphi中WMI的使用(一)
  8. Docker 安装与操作 Mysql 数据库快速入门
  9. (四)、jave2加工视频
  10. 大数据项目开发进度(实时更新)
  11. 嵌入式linux机械臂,一款基于ARM嵌入式的机械臂的设计与实现
  12. 混沌理论(Chaos Theory)
  13. 随笔---ubuntu下通过ifstat查看实时网速
  14. 多 “维” 优化——前端高并发策略的更深层思考
  15. .exe文件打开闪退
  16. MSP430 G2553 Launchpad实现电容测量
  17. Error: Cannot find module ‘babel-preset-es2015‘
  18. mysql 64 免安装_MYSQL 免安装版(windows 7/64)
  19. 关于学校edu邮箱登录第三方邮件客户端(例如Outlook、Foxmail、QQ邮箱、邮件App等)的注意事项
  20. 惠普1005w打印机使用说明书_首款能充粉的打印机来了 惠普1005w一体机评测

热门文章

  1. 最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面
  2. usaco frame up(所有拓扑排序的输出)
  3. qteewidgetitem添加子节点_行为树的节点
  4. java运行时_java编译时与运行时概念与实例详解
  5. 用法 stl_51Nod 2160 数字游戏 STL基本用法
  6. php10-e 豪华版,华为畅享 10e 规格参数
  7. jquery发送put请求_浅谈GET,POST,PUT发送请求
  8. 动态图相册 android,‎App Store 上的“动态图相册”
  9. ftl模板导出excel_freemarker导出复杂Excel
  10. java 常用方法_Java常用方法总结(持续更新中)