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

在C++中有关从终端中输入数据的函数的理解一直比较模糊,写在这里面来分享给你们,而且方便本身之后查阅。html

我通常在写C++程序的时候都会在头文件中引入iostream, cstdio, cstring, cmath这几个文件,以便方便后面相关库内函数的应用。下面,将按照顺序介绍这些函数。ios

1. cinc++

  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 流控制spa

2. cin.get()指针

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

#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。htm

#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个字符以前遇到终止字符,提早结束读取。blog

#include<iostream>
using namespace std;

int main(){
    char c[20];
    cin.get(c,10,'\n');
    cout<<c<<endl;
    return 0;
}

或者使用char*, 以下

#include<iostream>
using namespace std;

int main(){
    char* c;
    c = new char[20]; //动态指针使用前须要分配内存 
    cin.get(c,10,'\n');
    cout<<c<<endl;
    return 0;
}

 

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

cin.getline(),和cin.get()的用法相似,只不过cin.getline()的终止字符默认为“\n”(换行符),并且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;
}
相关文章
相关标签/搜索