对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解
2007-09-09 16:51
393 查看
其中 cs 是指向 char 的 buf, size是buf的长度,
c是终止字符(default=='/n')。
void main()
{
const int size = 16;
char cs[size];
while(cin.get(cs,size))
{
int i=cin.gcount();
cout<<i<<": "<<cs<<endl;
cin.ignore();
}
我猜测 cin.get()是这样的运行步骤:
0 cin.get()试图从OS管理的输入缓冲(在用户敲键盘时触发对应
中断,然后由中断处理例程将按键键码转换为ascii码值,放
到OS内部缓冲里。)中取字符,如果缓冲为空则等待
用户输入,否则跳到步骤2;
1 用户按回车键后,cin.get()继续取得控制权;
2 cin.get()对输入缓冲中字符做如下处理:
a 当输入缓冲中第一个字符为终止字符或到达文件末尾时
cin.get()退出并返回false;
b 否则,cin.get()依次将输入缓冲的字符move(注意不是copy)
到cs中,直到遇到一下3种情况之一 :到达文件末尾、已
move的字符数等于size-1、输入缓冲的字符是终止字符。
这时,cin.get()将’/0’字符插入cs末尾。如果这时输入缓冲
还有字符,则这些字符被保留。(上面的第3种情况里终止
字符也被保留在输入缓冲中而不被取出。);
c cin.get()退出并返回true.
3 这时执行while block 中的代码,其中使用cin.ignore()将输入
缓冲里第一个字符---即终止字符删除。(原因如下。)
4 while 再次调用 get.line() 从而回到步骤 0 。这时如果没有
上面的cin.ignore(),由于输入缓冲里第一个字符就是终止字符,
所以就会退出while。
c是终止字符(default=='/n')。
void main()
{
const int size = 16;
char cs[size];
while(cin.get(cs,size))
{
int i=cin.gcount();
cout<<i<<": "<<cs<<endl;
cin.ignore();
}
我猜测 cin.get()是这样的运行步骤:
0 cin.get()试图从OS管理的输入缓冲(在用户敲键盘时触发对应
中断,然后由中断处理例程将按键键码转换为ascii码值,放
到OS内部缓冲里。)中取字符,如果缓冲为空则等待
用户输入,否则跳到步骤2;
1 用户按回车键后,cin.get()继续取得控制权;
2 cin.get()对输入缓冲中字符做如下处理:
a 当输入缓冲中第一个字符为终止字符或到达文件末尾时
cin.get()退出并返回false;
b 否则,cin.get()依次将输入缓冲的字符move(注意不是copy)
到cs中,直到遇到一下3种情况之一 :到达文件末尾、已
move的字符数等于size-1、输入缓冲的字符是终止字符。
这时,cin.get()将’/0’字符插入cs末尾。如果这时输入缓冲
还有字符,则这些字符被保留。(上面的第3种情况里终止
字符也被保留在输入缓冲中而不被取出。);
c cin.get()退出并返回true.
3 这时执行while block 中的代码,其中使用cin.ignore()将输入
缓冲里第一个字符---即终止字符删除。(原因如下。)
4 while 再次调用 get.line() 从而回到步骤 0 。这时如果没有
上面的cin.ignore(),由于输入缓冲里第一个字符就是终止字符,
所以就会退出while。
相关文章推荐
- 对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解
- C++ premer Plus 第6版第6章第5题 &&cin>>初步理解
- C++中cin.get(),cin.getline(),cin>>,gets(),cin.clear()使用总结
- c++中字符输入函数cin.getline在输入char与string时的不同
- MySQL connector C++在Linux下编译undefined reference to 'get_driver_instance'问题
- ubuntu下 GCC编译程序出现 undefined reference to `std::ios_base::Init::Init()'问题——gcc编译C++代码
- C++ 输入函数 cin>>、cin.getline()和cin.get()区别
- 【C语言】 缓冲区问题 循环使用getchar scanf会受到换行符'\n'的干扰
- C++ 输入函数 cin>>、cin.getline()和cin.get()区别
- [C/C++]warning: format '%c' expects argument of type 'char*', but argument 2 has type 'int' [-Wforma
- c++:warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
- C++ STL's Algorithms
- 详细解说 STL 排序(Sort)_C++ Programmer's Cookbook
- C++:invalid conversion from 'unsigned char *' to 'const char *'
- How to get rid of `deprecated conversion from string constant to 'char*'` warnings in GCC?
- 从cin>>ch, cin.get(ch)看C++的参数引用
- iOS 理解@property和set&get方法
- C++ STL map I don't want it to sort!
- c++builder error:[Linker Error] Unresolved external 'GetAdaptersInfo' referenced from……
- 【C++】cin、cin.get(char)和getline()