对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解

简介:

其中 cs 是指向 char buf, sizebuf的长度,

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

 

相关文章
|
12天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
17 2
|
8天前
|
存储 算法 C++
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
20 0
|
8天前
|
存储 算法 编译器
【C++初阶】STL详解(三)vector的介绍与使用
【C++初阶】STL详解(三)vector的介绍与使用
25 0
|
8天前
|
存储 编译器 C++
【C++初阶】STL详解(四)vector的模拟实现
【C++初阶】STL详解(四)vector的模拟实现
35 1
|
12天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
47 1
|
23天前
|
算法 C++ 容器
【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现
【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现
|
23天前
|
C++ 容器
【C++练级之路】【Lv.9】【STL】stack类和queue类的模拟实现
【C++练级之路】【Lv.9】【STL】stack类和queue类的模拟实现
|
22天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
31 0
|
22天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
31 0
存储 编译器 Linux
18 0