C++ 基础: cin和getline() 有啥区别?

2023-11-12

所谓温故而知新,所以时不时会回头来看看我们最最基础的知识。
获取标准键盘输入的方法有多种。以C++语言来说,最常用的就是cin 和geline() 。那么它们之间有什么区别呢,我们总结一下。

一、cin和geline的异同点

在 C++ 中,cin 和 getline 都是用于从标准输入读取数据的函数。
它们的主要区别在于读取数据的方式和行为。

cin

cin 通常用于读取基本数据类型,如整数、浮点数和字符等,它会忽略输入缓冲区中的空白字符(如空格、制表符和换行符)并将其留在缓冲区中。例如:

c++
int num;
cin >> num;

如果用户输入了一个数字后按下回车键,cin 将读取该数字,并且回车字符仍然留在输入缓冲区中。

getline

相反,getline 用于读取一行文本,包括空格和其他特殊字符,直到遇到换行符或文件结尾。例如:

c++
string line;
getline(cin, line);

getline 会将输入缓冲区中的所有内容都读取完毕,包括换行符。因此,如果你想在使用 getline 之前调用 cin 来读取某个数据,你需要在这两个函数之间清空输入缓冲区(例如通过调用 cin.ignore() 函数),以免影响 getline 的结果。

一个完整的例子

#include <iostream>
#include <string>
using namespace std;

int main()
{
    std::cout << "Hello World!\n";

    int a;
    cin >> a;
    cout << a << endl;

    cin.ignore();

    string s;
    getline(cin, s);
    cout << s << endl;
}

二、顺便盘点下在C语言中我们常用的获取键盘输入的方法

在C和C++中,获取键盘输入的几种常用方法包括:

1、使用getchar()函数:这个函数从标准输入(键盘)读取一个字符,并返回其ASCII码值。

#include <stdio.h>

int main()
{
    char c;
    printf("Enter a character: ");
    c = getchar();  // 获取键盘输入
    printf("You entered: %c\n", c);
    return 0;
}

2、使用scanf()函数:这个函数可以按照指定的格式从标准输入(键盘)读取数据。例如,使用%c格式可以读取一个字符。

#include <stdio.h>

int main()
{
    char c;
    printf("Enter a character: ");
    scanf("%c", &c);  // 获取键盘输入
    printf("You entered: %c\n", c);
    return 0;
}

3、使用gets()或fgets()函数:这些函数可以从标准输入(键盘)读取一行字符。gets()函数已经被淘汰了,建议使用更安全的fgets()函数。

#include <stdio.h>

int main()
{
    char str[100];
    printf("Enter a string: ");
    fgets(str, 100, stdin);  // 获取键盘输入
    printf("You entered: %s", str);
    return 0;
}

使用第三方库:例如,使用ncurses库可以实现对终端窗口的控制和读取键盘输入等功能。
以上是一些常用的方法,但还有其他方法也可以获取键盘输入。需要根据具体的应用场景来选择最合适的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 基础: cin和getline() 有啥区别? 的相关文章

  • 为 DocumentDb 设置自定义 json 转换器

    我正在使用类型化 DocumentQuery 从 Azure DocumentDb 集合中读取文档 from f in client CreateDocumentQuery
  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • 带有 ASP.NET 按钮回发的 jQuery UI 对话框

    我的 ASP NET 页面上有一个运行良好的 jQuery UI 对话框 jQuery function jQuery dialog dialog draggable true resizable true show Transfer hi
  • 如何使用不同的基本路径托管 Blazor WebAssembly 应用程序

    我有一个 Blazor Webassemble NET 托管应用程序 在我们托管它的服务器上 应用程序的基本路径将是mydomain com coolapp 因此 为了尝试让应用程序在服务器上正确呈现 我一直遵循本页 应用程序基本路径 部分
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 非模板函数中的尾随返回类型[重复]

    这个问题在这里已经有答案了 我见过有人使用以下语法来实现函数 auto get next gt int 代替 int get next 我理解两者 并且我知道尾随返回类型语法对于使用 decltype 的模板代码很有用 就我个人而言 我会避
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 将同步 zip 操作转换为异步

    我们有一个现有的库 其中一些方法需要转换为异步方法 但是我不确定如何使用以下方法执行此操作 错误处理已被删除 该方法的目的是压缩文件并将其保存到磁盘 请注意 zip 类不公开任何异步方法 public static bool ZipAndS
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • 小程序修改顶部导航栏的颜色(电量、时间、胶囊)

    wx setNavigationBarColor frontColor ffffff backgroundColor ffffff 注意 其中frontColor的值只能是 ffffff或者 000000在设置的时候必须结合backgrou
  • STM32实现精准us级延时

    前言 在上一篇文章已经讲了使用通用定时器的方式实现ms和s级别的延时 为什么没有us级别的呢 因为在示波器测量时 没有计算好程序执行的时间 这次找到了方法 测试出通用定时器延时的精准性 同时 也查找了网上常用的使用系统定时器非中断的方式进行
  • 你是外包,麻烦不要偷吃零食,注意素质..

    我自己没经历过外包 靠自己的所见所闻可能写出来的东西会很主观 所幸我有不少外包的读者 还有几个在外包工作或工作过的朋友 在跟她们深度交流之后 这这里聊一下我自己的一些看法 注 本文不代表所有外包公司 依旧存在部分主观意识 目前市场上比较知名
  • 【VMD-LSTM】变分模态分解-长短时记忆神经网络研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 变分模态分解算法 1 2 LSTM 2 运行结果 编辑 3 参考文献 4 Python代码实现 1
  • js项目练习第二课

    百度输入法
  • C# 三种代码注释方式

    1 常规注释方式 单行注释 以 符号开始 任何位于 符号后的本行文字都视为注释 块注释 以 开始 结束 任何介于这对符号之间的文字块都视为注释 2 XML注释方式 Extensible Markup Language 可扩展标记语言 符号是
  • Java初级面试常见面试题

    下面的这些不够看 可以访问我的语雀专栏 https www yuque com greedy 9i38g tzpwui 面试题 文章目录 JavaSE Java基本数据类型大小 JAVA中 和 两种符号 抽象类不能创建对象 那么抽象类中是否
  • 剑指offer面试题【14】----剪绳子【Python】【动态规划】【贪婪算法】

    题目描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 例如 当绳子的长度为8时 我们把它剪成长度分别为2
  • 一天一道算法题(为更好的明天奋斗)

    往期 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 示例 给定 nums 2 7 11 1
  • zynq的lwip echo server实验(有无法ping通的解决方案)

    很多朋友卡在了无法接受回传数据的问题上 下面分享下我的搭建过程和解决方法 这里提供我的工程和用到的两个教程 版本vivado vitis2020 2 lwip echoserver zip C文档类资源 CSDN下载 1 根据开发板的端口
  • nfsv4文件服务器,在CentOS 7上配置NFSv3和NFSv4的步骤

    本文介绍在CentOS 7上配置NFSv3和NFSv4的具体步骤 唯一的条件是你应该安装CentOS 7服务器和数据目录以通过NFS导出到其它服务器 安装请参考在VMware中安装CentOS操作系统教程 第1步 安装NFS服务器 使用以下
  • 阿里云oss出现No ‘Access-Control-Allow-Origin‘的问题

    解决办法 在oss管理控制台中设置bucket中数据安全的跨域设置 然后创建规则 来源是请求的网址 可以使用通配符 允许 Methods就是允许跨域的方法 可以多选 注意这里的规则最多10条
  • Arduino对57步进电机的控制

    最近实验室的智能车从大车路线改到了小车路线 于是笔者也跟着学习一些新的知识 大车的控制可以使用标准的CAN协议 很多方便的指令都能够通过CAN来传输给ECU并得到相应的反馈 然而对于最近接触的电动小白车 控制策略只能使用物理机械去控制 因此
  • 循环链表算法及代码实现

    一 循环单链表 直接上图就能够说明循环单链表的存储结构 简单直观 我们关注一下其特点 与非循环单链表相比 循环单链表 1 无空指针域 2 尾节点的判断条件为 p gt next L 二 循环双链表 同样直接上图 与非循环双链表相比 1 无空
  • 实现图片验证码【详细代码】

    实际开发过程中经常遇到要实现图片验证码来防止外部使用脚本刷接口 所以说图片验证码是很有必要的一个小功能 html div class user phone div
  • PyTorch模型 .pt、.pth与.pkl 的区别

    PyTorch模型 pt pth与 pkl 的区别 1 项目场景 2 问题描述 3 原因分析 1 项目场景 调试PyTorch代码保存训练模型的时候有些时候保存的格式是 pt 有些时候是 pth与 pkl 不禁好奇它们之间的区别 2 问题描
  • shell脚本系列:3、shell命令

    shell脚本系列 3 shell命令 文章目录 shell脚本系列 3 shell命令 1 保留字 2 简单的命令 3 管道 4 命令列表 5 复合循环指令 5 1 循环结构 5 2 条件结构 5 3 分组命令 6 协程 7 GUN Pa
  • MATLAB遍历子文件夹及其下文件

    MATLAB遍历子文件夹及其下文件 以前从未遇到过用MATLAB批处理文件的情况 此次项目需要批量将二进制数据文件导入matlab进行svm分类 现将matlab遍历子文件夹及其文件的方法记录下来 文件目录结构 maindir subdir
  • Java基础必知必会

    基础知识笔记记录 持续更新ing 个人博客 www zhazhapeng cn 1 JDK JRE的区别 JDK Java Development Kit 开发工具 基本类库 javac 编译 javap 反编译 javadoc 编译文档
  • C++ 基础: cin和getline() 有啥区别?

    所谓温故而知新 所以时不时会回头来看看我们最最基础的知识 获取标准键盘输入的方法有多种 以C 语言来说 最常用的就是cin 和geline 那么它们之间有什么区别呢 我们总结一下 一 cin和geline的异同点 在 C 中 cin 和 g