C++标准库里有针对外设输入操作进行处理的类——istream。而常用的cin则是istream的类对象。因此实际上我们可以重新定义新的输入流对象代替cin对输入进行操作。而我们常用的istream类成员函数有如下一些:
istream类
istream::getline() 函数
原型:istream& getline (char* s, streamsize n, char delim )
提取一行的字符串,s 是存储数据的变量的名字,n为输入数据的长度,delim为结束的标志字符(遇到就结束,不理会数据有多长,可以不要)
char name[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256);
std::cout << "Hell0, " << name;
NOTE: cin.getline()与getline()是不同的, getline()的原型是istream& getline ( istream &is , string &str , char delim ),使用前必须包含头文件,其使用例子如下(同样,delim可不写,则默认为回车结束):
string line;
cout << "please cin a line:" << endl;
getline(cin,line,'#');
cout << "The input line is:" << line;
istream::ignore() 函数
原型:istream& ignore (streamsize n = 1, int delim = EOF)
忽略输入流中的n个字符,或者当遇到输入流中有一个值等于delim时停止忽略并返回。
char first[10], last[10];
cin >> first;
cin.ignore(256, '\0');
cin >> last;
cout << endl << first << endl << last << endl;
istream::get() 函数
get()的主要函数原型有以下三种:
1). int get();
从指定的输入流中读入一个字符(包括空白字符);遇到输入流中的文件结束符时,此get函数返回EOF;
char ch;
ch = cin.get();
cout << ch << endl;
2). istream& get (char& c);
从输入流读取一个字符(包括空白字符),并将其存储在字符变量 c 中。事实上get(char& c)与get( )作用基本相同;
char ch;
cin.get(ch);
cout << ch << endl;
3). istream& get (char* s, streamsize n, char delim = ‘\n’);
从输入流中读取n-1个字符,存于字符指针 s指向的内存。如果在读取n-1个字符之前遇到指定的终止字符delim,则提前结束读取。程序会自动在字符串最后增加一个’\0’表示结束;
char *s;
cin.get(s, 18, '\#');
if(s[17] == '\0')
cout << s << endl;
peek() 函数
原型:int peek();
该函数用于查看输入流当中的下一个字符,但不会将它取出(即它仍在输入流当中)。字符指针仍停留在原来位置上;
char s[20], ch;
int count=0;
while(cin.get(ch))
{
s[count]=ch;
count++;
if(cin.peek() == '\n')
break;
}
putback() 函数
原型:istream& putback (char c);
把一个字符放回输入流当中;可用于检查用get()确定数据的开头后将其放回然后再操作。
read() 函数
原型:istream& read (char* s, streamsize n);
该函数只是纯粹的提取输入流的n长度的数据段并保存在s中,它不会检查s的内容也不会在末尾增加null字符(‘\0’)。如果提取过程中失败,s保存之前提取的内容,且eofbit以及failbit置1。
gcount 函数
原型:streamsize gcount() const;
统计最后一次非正规操作读取的字符数,非正规操作(即除>>外其他读入输入流数据的操作,如:get, getline, ignore, peek, read, readsome, putback and unget等);
char str[20];
cout << "Please, enter a word: ";
cin.getline(str,20);
cout << cin.gcount() << " characters read:" << str << '\n';