当前位置: 首页 > news >正文

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

所谓温故而知新,所以时不时会回头来看看我们最最基础的知识。
获取标准键盘输入的方法有多种。以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库可以实现对终端窗口的控制和读取键盘输入等功能。
以上是一些常用的方法,但还有其他方法也可以获取键盘输入。需要根据具体的应用场景来选择最合适的方法。

http://www.lryc.cn/news/41161.html

相关文章:

  • 在使用fastjson中遇到的问题
  • C++造轮子飙车现场之无锁、有锁环形队列实现
  • Spring Profiles and @Profile
  • 数据分析-数据探索
  • 7个最受欢迎的Python库,大大提高开发效率
  • Intellij IDEA 中调试 maven 插件
  • Java全栈知识(1)缓存池
  • 网络安全的特性
  • YOLOv8 多目标跟踪
  • Gitee搭建个人博客(Beautiful Jekyll)
  • 图形视图框架 事件处理(item)
  • PTA第六章作业详解
  • Java课程设计项目--音乐视频网站系统
  • FPGA可以转IC设计吗?需要学习哪些技能?
  • 初探Gradle
  • 国产数据库介绍
  • Java OpenJudge-test3
  • 蓝桥杯刷题冲刺 | 倒计时22天
  • 入行 5年,跳槽 3次,我终于摸透了软件测试这行(来自过来人的忠告)
  • 开源时序数据库学习
  • 字节测试工程师悄悄告诉我的软件测试、测试开发常用的测试策略与测试手段
  • 我常用的shell 进制转换工具
  • 手写vue(二)响应式实现
  • mysql数据库常问面试题
  • AI风暴 :文心一言 VS GPT-4
  • VR全景城市,用720全景树立城市形象,打造3D可视化智慧城市
  • javaweb窗口服务人员分析评价系统ssh
  • 树莓派Pico W无线开发板UDP协议MicroPython网络编程实践
  • 跨域解决方案
  • springboot的统一处理