zoukankan      html  css  js  c++  java
  • 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 () 
    { 
    int a,b; 
    char c[20];
    string str;
    cin >> a >> b;
    cin >> c;
    cin >> str; cout << a+b << endl;
    cout << c<< endl;
    cout << str << endl; }

    注意:“>>”会过滤掉不可见字符(如空格,enter, Tab等),当输入为字符串时,遇到“空格”、enter, Tab等会表示字符串输入结束。但是,cin读完之后虽然会忽略这些,他们的指针仍会停留在这些终止符号上。

    cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制

    2. cin.get()

    用法一:使用cin.get(ch)来将接收到的字符存入 char ch中,如果读取成功返回非0值,读取失败(遇到文件结束符eof)返回0,可接受空格,回车,Tab等。

    #include<iostream>
    using namespace std;
    
    int main(){
        char c;
        while(cin.get(c))
            cout.put(c);
        return 0;
    }

    用法二:使用char ch = cin.get(), 将接收到的字符存入ch中,cin.get()函数的返回值就是这个字符,文件结束符会返回EOF,一般以-1代表EOF。

    #include<iostream>
    using namespace std;
    
    int main(){
        char c;
        while((c=cin.get()!=EOF))
            cout.put(c);
        return 0;
    }

    用法三:cin.get(字符指针,字符个数n,终止字符),读取n-1个字符,若在n-1个字符之前遇到终止字符,提前结束读取。

    #include<iostream>
    using namespace std;
    
    int main(){
        char c[20];
        cin.get(c,10,'
    ');
        cout<<c<<endl;
        return 0;
    }

    或者使用char*, 如下

    #include<iostream>
    using namespace std;
    
    int main(){
        char* c;
        c = new char[20]; //动态指针使用前需要分配内存 
        cin.get(c,10,'
    ');
        cout<<c<<endl;
        return 0;
    }

    3. cin.getline()(字符数组(或指针),字符个数n,终止字符)

    cin.getline(),和cin.get()的用法类似,只不过cin.getline()的终止字符默认为“ ”(换行符),而且cin.getline与cin.get的区别:cin.get( , , )遇到终止字符停止读取后,指针不向后移动;cin.getline( , , )遇到终止字符结束后,指针移到终止字符后。

    #include<iostream>
    using namespace std;
    int main(){
        char c[20];
        cin.getline(c,20,'/');
        cout<<c<<endl;
        return 0;
    }

    4. getline()

    getline()是string类的函数,它一般用来输入string类型的字符串,接受空格,与到换行符结束,结束后指针如cin.getline()一样会指到换行符之后。

    和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数。

    #include<iostream> 
    #include<string> 
    using namespace std; 
    main () 
    { 
    string str; 
    getline(cin,str); 
    cout<<str<<endl; 
    }

    5. gechar() 需要引入 <cstdio>

    C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。

    #include <stdio.h>
    
    int main ()
    {
       char c;
     
       printf("请输入字符:");
       c = getchar();
     
       printf("输入的字符:");
       putchar(c);
    
       return(0);
    }

    这个可以看《c++的geline问题》http://www.cnblogs.com/hhddcpp/p/4308587.html一文,当出现getline(cin,str);语句不执行而是直接跳过的时候,可以在getline一句之前加一句cin.get()或者getchar(),吃掉不需要的空格和换行符。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    
    using namespace std;
    
    int main()
    {
        string str;
        int guess[10];
    
        while(str != "abc"){
            cin >> guess[j];
            //getchar();
            cin.get();
            getline(cin , str);
            j++;
        }
        return 0;
    }
  • 相关阅读:
    sqlserver添加表、字段注释
    SQL语句增加字段、修改字段、修改类型、修改默认值
    端口概念
    删除数据库数据
    转移数据库表数据
    优化网站
    提高SQL查询效率
    相关方法扩展
    SQL空和NULL的区别
    C#分布式缓存Couchbase使用
  • 原文地址:https://www.cnblogs.com/superjn/p/10035790.html
Copyright © 2011-2022 走看看