缓冲区 cin() getline() getchar()

程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

. cin>>

该操作符是根据后面变量的类型读取数据。

输入结束条件 :遇到Enter、Space、Tab键。

对结束符的处理 :将\n类似的结束符落在缓冲区里.

所以会有如下的程序和结果:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s1,s2;
  7. cin>>s1;
  8. getline(cin,s2);
  9. cout<<s1<<endl;
  10. cout<<s2<<endl;
  11.    return 0;
  12. }

只输入了一行abc, 然后回车后就输出一行abc, 一行空

这是因为cin在缓冲区里丢下的\n 给后面的getline()当成输入结束的标志了

二.getline(cin, str)

输入结束条件:Enter键

对结束符处理:将\n结束符从缓冲区里清除.

所以会有如下的程序

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s1,s2;
  7. getline(cin,s1);
  8. getline(cin,s2);
  9. cout<<s1<<endl;
  10. cout<<s2<<endl;
  11.    return 0;
  12. }

如果在输入完abc后, 按两次回车, 就会有如下结果

三.getchar()

清除缓冲区里的\n , 建议用getchar(), 这种方式最方便.

四. 例子

先输入一个整数到变量n里 ,然后读入n行字符串, 注意用getchar()消除\n

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. int n;
  7. string s1;
  8. cin>>n;
  9. getchar();
  10. while(n--){
  11. getline(cin, s1);
  12. }
  13. //process these strings
  14.    return 0;
  15. }


来自为知笔记(Wiz)

时间: 2024-11-08 16:10:07

缓冲区 cin() getline() getchar()的相关文章

c++中 cin、cin.get()、cin.getline()、cin.getchar()的区别

①cin>>:无法接收空格.Tap键且以空格.Tap键.回车符为分隔符: ②cin.get( ):可以接收空格.Tap键且以回车符为结束符: 一:可输入单个字符 格式: char ch; ch=cin.get( );/cin.get(ch); 二:可输入字符串 格式: cin.get(字符数组名,元素个数) ③getline( ):可接收空格.Tap键且以回车符为结束符: 格式: string str;//字符串变量 getline(cin,str); ④cin.getline( ):可接收空

getchar()、putchar()、gets()、puts()、cin.get()、cin.getline()、getline()

1.getchar: 原型为int getchar(void). 它从stdin里读取一个字符.返回值为用户输入的ASCⅡ码,出错返回-1. eg:c=getchar(). 2.putchar: 原型为unsigned int putchar(char). 在stdout上输出一个字符.当输出正确的时候,返回输出字符转换为的unsigned int 值:当输出错误的时候,返回 EOF(End of file)文件结束符,即-1. eg:putchar(c). 3.gets: 原型为char* g

cin/cin.get()/cin.getline()/getline()/gets()/getchar()

1.cin>>    用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream> using namespace std; main () { int a,b; cin>>a>>b; cout<<a+b<<endl; } 输入:2[回车]3[回车] 输出:5 注意:>> 是会过滤掉不可见字符(如 空格 回车,TAB 等) cin>>noskipws>>input[j];

cin.get(),cin.getline(),getline(),gets(),getchar()

----------------------- 1.cin.get() (1).cin.get()提取单个字符,可以提取回车.空格 a=cin.get(); (2)同(1) cin.get(a); (3). cin.get(字符数组,字符个数n,终止字符);//终止字符可以不写,默认为'\n' 或cin.get(字符指针,字符个数n,终止字符);//终止字符可以不写,默认为'\n' 不可跳过终止符号.需把回车'\n'提取掉 可以写成 cin.get(a,20); cin.get(); 也可以组合

C++基础:各种输入方法总结,cin、cin.get()、cin.getline()、getline()、gets()、getchar()

C++基础:各种输入方法总结,cin.cin.get().cin.getline().getline().gets().getchar() 原文地址:https://www.cnblogs.com/hpl20155329/p/9029458.html

C++ 中的 cin/cin.get()/cin.getline()/getline/getchar()

在C++中有关从终端中输入数据的函数的理解一直比较模糊,写在这里面来分享给大家,并且方便自己以后查阅. 我一般在写C++程序的时候都会在头文件中引入iostream, cstdio, cstring, cmath这几个文件,以便方便后面相关库内函数的应用.下面,将按照顺序介绍这些函数. 1. cin cin是从文件输入流中取出一个int/char/string等.最简单的用法是输入一个数字,即 #include <iostream> using namespace std; main () {

C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)

学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1.cin 2.cin.get() 3.cin.getline() 4.getline() 5.gets() 6.getchar() 附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符 1.cin>>          用法1:最基本,也是最常用的用法,输入一个数字: #includ

C++基础:各种输入方法总结,cin、cin.get()、cin.getline()、getline()、gets()

在C++中,各种输入方法还是不少的,而且各有所异,本文做一点简要总结,主要涉及如下内容:cin.cin.get().cin.getline().getline().gets().getchar(). 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入. 比如

cin 与 getchar 中的坑

今天在一道题上发现一个坑. 输入三个字符,按以下规则求其平均值. (1)如果是数字0~9,那么直接参与求值: (2)如果是其他字符,则其ASCII码参与求值. 输入 输入数据有多组.第一行是数据的组数T,接下来由T行,每行有3个字符,没有其他任何多余字符. 输出 对于每组输入,根据规则输出平均值.保留2位小数. 样例输入 2 123 1A3 样例输出 2.00 23.00 这是我栽了几次坑之后,还是错的代码: #include<iostream>#include<cstdio>us