C++ cin.get用法案例详解

 更新时间:2021年08月31日 16:23:12   投稿:xusong  
这篇文章主要介绍了C++ cin.get用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

与字符串输入一样,有时候使用 cin>> 读取字符也不会按我们想要的结果行事。

例如,因为它会忽略掉所有前导白色空格,所以使用 cin>> 就不可能仅输入一个空格或回车符。除非用户输入了空格键、制表符之外的其他字符,否则程序将不可能通过 cin 语句继续执行(一旦输入了这样的字符,在程序可以继续下一个语句之前,仍然需要按回车键)。因此,要求用户“按回车键继续”的程序,不能使用 >> 运算符只读取按回车键的行为。

在这些情况下,cin 对象有一个名为 get 的内置函数很有帮助。因为 get 函数是内置在 cin 对象中的,所以可称之为 cin 的一个成员函数。get 成员函数读取单个字符,包括任何白色空格字符。如果程序需要存储正在读取的字符,则可以通过以下任意一种方式调用 get 成员函数。

在这两个例子中,假设 cin 是正被读入字符的 char 变量的名称:

cin.get (ch);
ch = cin.get();

如果程序正在使用 get 函数简单地暂停屏幕直到按回车键,并且不需要存储字符,则该函数也可以这样调用:

cin.get();

请注意,在所有这 3 个编程语句中,get 函数调用的格式实际上是一样的。首先是对象的名称,在此示例中它是 cin。然后是一个句点,其后是被调用的成员函数的名称,在这里当然就是 get。语句的末尾是一组括号和一个表示结束的分号。这是调用任何成员函数的基本格式,如图 1 所示。

成员函数调用的基本格式
图 1 成员函数调用的基本格式

下面的程序演示了使用 get 成员函数的所有 3 种方式:

// This program demonstrates three ways to use cin.get()
// to pause a program.
#include <iostream>
using namespace std;

int main()
{
    char ch;
    cout << "This program has paused. Press Enter to continue.";
    cin.get(ch);
    cout << "It has paused a second time. Please press Enter again."; ch = cin.get();
    cout << "It has paused a third time. Please press Enter again.";
    cin.get();
    cout << "Thank you! \n";
    return 0;
}

程序输出结果:

This program has paused. Press Enter to continue.
It has paused a second time. Please press Enter again.
It has paused a third time. Please press Enter again.
Thank you!

注意,在 IDE 中运行程序时,当程序终止,则输出窗口会关闭,而 cin.get 函数可用于保持输出屏幕可见。

混合使用 cin>> 和 cin.get

将 cin >> 与 cin.get 混合使用可能会导致烦人且难以发现的问题。请看下面的代码段示例:

char ch;    //定义一个字符变量
int number; //定义一个整型变量
cout << "Enter a number: ”;
cin >> number;   // 读取整数
cout << "Enter a character: ";
ch = cin.get() ;   // 读取字符
cout << "Thank You!\n";

这些语句允许用户输入一个数字,而不是一个字符。看来第 6 行的 cin.get 语句已经被跳过了。这是因为 cin>> 和 cin.get 使用略有不同的技术来读取数据。

在示例代码段中,当执行第 4 行时,用户输入一个数字,然后按回车键。假设输入的是数字 100。按回车键会导致一个换行符('\n')存储在键盘缓冲区数字 100 之后,如图 2 所示。

键盘缓冲区存储和读取示意图
图 2 键盘缓冲区存储和读取示意图

当第 4 行中的 cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止。换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空。

当第 6 行中的 cin.get 函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值。这种问题最直接的解决办法是使用 cin.ignore 函数。

到此这篇关于C++ cin.get用法案例详解的文章就介绍到这了,更多相关C++ cin.get用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++入门语法之函数重载详解

    C++入门语法之函数重载详解

    这篇文章主要为大家详细介绍了C++入门语法之函数重载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法

    关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法

    这篇文章主要介绍了关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法,本文给大家介绍的非常详细,对大家的学习工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C实现与 uint64_t 相同功能的类

    C实现与 uint64_t 相同功能的类

    本文给大家分享的是笔者实现的仿uint64_t的类,可以用在不支持uint64_t的平台上,虽然现在功能还不完善,但是还是分享给大家,也算是给大家一个思路吧。
    2015-12-12
  • 详细总结C++的排序算法

    详细总结C++的排序算法

    趁空闲时间,小编决定把C++的排序算法分析并总结下,以便温故知新。也方便需要的朋友可以参考学习。
    2016-07-07
  • OpenCV图像处理基本操作详解

    OpenCV图像处理基本操作详解

    这篇文章主要为大家详细介绍了OpenCV图像处理基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • C语言 设计模式之访问者模式

    C语言 设计模式之访问者模式

    这篇文章主要介绍了C语言 设计模式之访问者模式的相关资料,需要的朋友可以参考下
    2017-01-01
  • c++ fstream 文件追加模式示例详解

    c++ fstream 文件追加模式示例详解

    本文给大家介绍c++ fstream 文件追加模式示例详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • C语言实例真题讲解数据结构中单向环形链表

    C语言实例真题讲解数据结构中单向环形链表

    链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础。链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻。在维护一组数据集合时,就可以使用链表,这一点和数组很相似
    2022-04-04
  • C 标准I/O库的粗略实现教程

    C 标准I/O库的粗略实现教程

    下面小编就为大家分享一篇C 标准I/O库的粗略实现教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 如何为Qt视图中的文字实现彩虹渐变效果

    如何为Qt视图中的文字实现彩虹渐变效果

    这篇文章主要给大家介绍了关于如何为Qt视图中的文字实现彩虹渐变效果的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Qt具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论