zoukankan      html  css  js  c++  java
  • 缓冲区 cin() getline() getchar()

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

    . cin>>

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

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

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

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

    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在缓冲区里丢下的 给后面的getline()当成输入结束的标志了

    二.getline(cin, str)

    输入结束条件:Enter键

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

    所以会有如下的程序

    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()

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

    四. 例子

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

    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. }










  • 相关阅读:
    物联网普而不及 仍缺杀手级应用
    05-if和switch的简单比较
    05-if使用注意
    04-关系运算符使用注意
    03-sizeof的用法
    01-scanf函数的注意点
    01-变量的内存分析
    06-自定义构造方法
    06-构造方法
    05-id的使用
  • 原文地址:https://www.cnblogs.com/gremount/p/5788691.html
Copyright © 2011-2022 走看看