首页 > C++利用cin输入时检测回车的方法

C++利用cin输入时检测回车的方法

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

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

方法一:利用getchar()函数

 1 //**************************将输入的单词逆序输出*************************//
 2 #include 
 3 #include
 4 #include 
 5 #include
 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() == '
')    //检测如果是空格,退出循环;
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())!='
')     //每个getchar()依次读入一个字符
 7         printf("%c",c);            //按照原样输出
 8     printf("
");
 9     system("pause");
10     return 0;
11 }

 

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

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

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

 

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

更多相关:

  • CentOS7自带的git版本1.8.3.1,这个版本有点低了。于是决定折腾升级, 实操记录在此: 1、确认你的当前git版本 在终端输入: git --version   2、使用root账号 在终端终入: su root 然后输入root账号的密码,注意linux下输密码时界面是没有变化的   3、配置存储库 启用Wa...

  • 题目描述: 根据输入的运算符对输入的整数进行简单的整数运算。 运算符只会是加+、减-、乘*、除/、求余%、阶乘!六个运算符之一。 输出运算的结果,如果出现除数为零,则输出“error”,如果求余运算的第二个运算数为0,也输出“error”。 输入: 输入为一行。先输入第一个整数,空格输入运算符,然后再空格输入第二个整数,回车结束...

  • 1、调出命令窗口:开始---->运行---->cmd,或者是window+R组合键   2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口,比如是4300,我们拿它来做实验。 3、查看被占用端口对应的PID,输入命令:netstat -aon|findstr "4300",回车,记下最后一位...

  • 关于这个问题其实我很早之前就研究过,只是一直都是弄一次就不管了,下次就忘记怎么弄了,又去查,现在就写个笔记吧。 win8/8.1 在开始的界面输入netplwiz,或者点击win+r打开运行,输入netplwiz,然后回车 会弹出这个框框 然后会然你输入密码,输入之后点击确定就可以了。   winXP/7: 这个系统有点不同 使用...

  • 运算符一.算数运算:二.比较运算:三.赋值运算四.逻辑运算 五.成员运算基本数据类型一.Number(数字)Python3中支持int、float、bool、complex。使用内置的type()函数查询变量类型。int(整型)在python2中整数类型有两种一个是int,表示整型,一种是long,表示长整型。而在python3中整数...

  • 题目:面试题38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] 限制: 1 <= s 的长度 <= 8 解题: clas...

  •      给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出:...

  • Redis没有使用C语言字符串的形式,通过’’作为结尾,而是使用了简单动态字符串(simple dynamic string)。 当Redis使用的字符串不需要修改字符串的内容的时候,可以使用C语言提供的字符串,当需要修改内容的时候就使用的是简单动态字符串。Redis键值对的操作中,都是使用的简单动态字符串的方式。 这里可以把简...

  • 设计思路:导入Scanner类输入字符串,再将输入的字符串转化为字符数组,然后从字符串左右两侧依次比较字符chu是否相同,若相同递归返回读取的字符个数,若返回字符的个数==输入字符串的长度,则输出该字符串是回文,否则输 出该字符串不是回文   import java.util.Scanner;public class test1...

  • 1. 三字母词 在C语言中有一种三字母词的说法,trigraph sequences,目前为止有九种三字母词,如下 ??=               #                  ??)            ]                  ??!           |         ??(      ...

  • 题目:   请你来实现一个 atoi 函数,使其能将字符串转换成整数。   首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。   当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组...

  • 联考考试考到了这个题,随机化40分,现在来秒掉它吧。   题意: 给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。 输入输出样例 输入样例#1: 复制 10 aabbaaabab 输出样例#1: 复制 3   我们定义$cnt[i][j]$表示区间$[1,i]$中,j出现的次数, 定义...

  • 本推文主要识别的验证码是这种:第一步: 二值化所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。第二步: 文字分割为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。第三步: 标准化对于部分特殊的验证码,需要对分割后的图片进行标准化处理,...

  •   源字符串: a a 1 ~`!@#$%^&()_+-={}[];',.- + 编码后: a%20a%201%20~%60%21@%23$%25%5E&%28%29_+-=%7B%7D%5B%5D;%27,.-%20+   源字符串: 变 ~!@#¥%…………&()——+=-·{}:“;‘、《》?,。、-+A a 1 编码后:...