初学C++,对于输入流cin的理解总有些不解,今天稍微做了下整理,总结了下目前所能了解的,相信随着学习的深入,会有更好的总结。代码中注释所标注的1.2.3.稍后会做一些解释。


/**
 * istream_test.c - 测试C++中的cin
 *
 * author/date - lc/20140407
 **/
#include <iostream>
#include <string>
//#include <climits>
#include <limits>
#include <vector>
using namespace std;
int main()
{
    cout << "---> TEST CHAR <---" << endl;
    char ch_char;       //测试char类型
    cin >> ch_char;
    cout << "char test:" << ch_char << endl;
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
//  cin.ignore(20,'\n'); //1.清除当前行的缓冲区
    cout << "---> TEST STRING <---" << endl;
    string ch_string;
    cin >> ch_string;
    cout << "string test:" << ch_string << endl; //测试stirng类型
    //输入字符串的循环结束
    vector<string> vec_string;
    while(cin>>ch_string)
        {
            if(ch_string == "quit" )  // 2.设置结束标志或者按ctrl+d结束
                break;
            vec_string.push_back(ch_string);
        }
    vector<string>::size_type count=vec_string.size();
    int i;
    for( i=0;i<count;i++)
        cout << "+++" << vec_string[i] << endl;
    //输入数值的循环结束
    vector<double> vec_double;
    double in_tmp;
    while(cin>>in_tmp)    // 3.如果输入字符则结束,即范围超过了数值,输入出现错误
        vec_double.push_back(in_tmp);
    vector<string>::size_type count_2=vec_double.size();
    for( i=0;i<count_2;i++)
        cout << "---" << vec_double[i] << endl;
               
    return 0;
}



cin是标准输入,是istream类的一个对象,作用是从终端读数据。>>运算符从标准输入读进一个字符串(或其它),它会略去输入开始碰到的空白字符,如空白,制表键,回车键或换行符,然后将连续的字符读入到后面的变量中。

1.清除缓冲,如果了解C的话,会知道输入输出都会有一个缓冲区,在满足一定条件时,缓冲区的数据才会输出,如果不清缓冲区,会发现在第一次输入一个字符串时,如“hello” 则ch_char=h ch_string=ello.

2.string类型的连续读入需要设置结束标志,当然如果按“ctrl+d”也可以,但毕竟不是程序本意。

3.如果输入为数值,那就好办了,输入一个字符就可以结束循环。