做校招题时cin/cout总是用不好,所以很有必要总结一下i/o的用法,完全掌握其用法才会得心应手! kai
1、streamsize gcount( ) const // 返回最后一次cin输出的字符个数,包括字符串结束符'\0';
// cin.gcount example #include <iostream> // std::cin, std::cout int main () { char str[20]; std::cout << "Please, enter a word: "; std::cin.getline(str,20); std::cout << std::cin.gcount() << " characters read: " << str << '\n'; return 0; }
Possible output:
Please, enter a word: simplify
9 characters read: simplify
2、istream::get()
single character (1) | int get(); istream& get (char& c); |
---|---|
c-string (2) | istream& get (char* s, streamsize n); istream& get (char* s, streamsize n, char delim); |
stream buffer (3) | istream& get (streambuf& sb); istream& get (streambuf& sb, char delim); |
第一种用法从cin中输出一个字符如cin.get(c);
第二种用法:
1)istream& get (char* s, streamsize n);
从cin或者istream中提取c风格的字符串,最大字符串长度为n,最后一个字符为‘\0’字符串结束字符:
char c[20];
cin.get(c,20);
如果写为:
char* c;
cin.get(c,20);
为错误的写法,因为系统没有分配char* 指向的空间,无法从cin中读取数据放入有效的位置,可改为:
char* c= new char[20];
cin.get(c,20);
2)istream& get (char* s, streamsize n, char delim);
delim为定界字符(delimiting characters),其默认值应该是'\n'(换行字符),如果人为定义的话可以是任意的你定义的字符,比如:
cin.get(c,20,'a'); //当遇到a字符时,只取a字符前的字符串部分输出给c字符串,此时,a字符并不从cin输入缓冲区提取,留给后来的变量提取,而getline则直接丢弃该字符!;
3) 输出为streambuff,用法与2)相同;
3、istream& ignore (streamsize n = 1, int delim = EOF); //丢弃多n个字符,或者遇到dlim为止;
4、其他:
int peek(); //偷看下一个字符而不从输入流提取;
istream& putback (char c); //将c放入输入流;
istream& read (char* s, streamsize n); //读取一串字符;
streamsize readsome (char* s, streamsize n);