cin 输入方法详解:

32 篇文章 6 订阅
订阅专栏

【前导】
       cin 输入操作原理: 输入操作的原理与之前提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。
[1]cin>>该操作符是根据后面变量的类型读取数据。输入结束条件:遇到Enter、Space、Tab键(这个很重要!) 。对结束符的处理 :丢弃缓存
[2]cin.get()该函数有三种格式:无参,一参数,二参数即cin.get(),cin.get(char ch), cin.get(array_name, Arsize) 。输入结束条件:Enter 键,对结束符处理:不丢弃
[3]cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

【cin>> / cin.get 用法】

       因为cin>>会忽略掉所有前导白色空格所以使用 cin>> 就不可能仅输入一个空格或回车符。除非用户输入了空格键、制表符之外的其他字符,否则程序将不可能通过 cin 语句继续执行(一旦输入了这样的字符,在程序可以继续下一个语句之前,仍然需要按回车键)。因此,要求用户“按回车键继续”的程序,不能使用 >> 运算符只读取按回车键的行为。
       在这些情况下,cin 对象有一个名为 get 的内置函数很有帮助。因为 get 函数是内置在 cin 对象中的,所以可称之为 cin 的一个成员函数。get 成员函数读取单个字符,包括任何白色空格字符。
   ① 如果程序需要存储正在读取的字符,则可以通过以下任意一种方式调用 get 成员函数。

在这两个例子中,假设 cin 是正被读入字符的 char 变量的名称:
cin.get (ch);
ch = cin.get();

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

cin.get();

下面的程序演示了使用 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 所示:

        当第 4 行中的 cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止。换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空。
       当第 6 行中的 cin.get 函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值。这种问题最直接的解决办法是使用 cin.ignore 函数。

【整理】【C++基础】 cin输入
赞美月亮的专栏
04-28 3839
文章目录Input and TypeInput Format Errorscin状态1. cin状态有如下几种2. 了解几种cin状态有关的函数3. 对于cin标准输入流检测到用户输入错误内容时,一般清空下应当采取以下三个步骤一一进行:参考 Input and Type input输入操作符>>对类型敏感,也就是说它根据待输入的变量的类型来输入。比如 int main { st...
c++:cin输入
wyz831201的博客
07-07 672
cin输入: 格式:cin>>变量1>>变量2>>…>>变量n; 注意事项: cin 语句把空格字符和回车换行符作为分隔符 cin 语句会忽略多余的输入数据 cin会根据变量的类型以相应的格式讲行输入 题目: 从键盘上读入一个三位数,以回车作为结束 ,然后将它反向输出。例如输入673,输出 应为376。 代码: #include <bits/stdc++.h> using namespace std; int main() { int
CLion中使用cin读取中文,出现中文无法识别的解决方法
最新发布
源星光子的博客
08-15 572
1.键盘按住ctrl+shift+alt+/ (在CLion界面,4个按键一起按)意义:此项代表着CLion会构建一个虚拟的终端,当然我们不需要就可以取消勾选。
C++——cin输入
qq_41790844的博客
06-16 609
clear()或者setstate()设置流状态后不一定会引发异常,需要与exceptions()返回进行比较,若返回的某一位被设置,当前状态的对应位也被设置,那么clear()将引发ios_base::failure异常,例如两个都是badbit,如果exceptions()返回goodbit,那么将不会引发异常,ios_base::failure是从std::exception类派生而来,因此它包含一个what()方法;字符串输入:getline(),get(),ignore();
cin输入方式
java领域博主
04-25 8447
cin常用的有三种方法cin>> cin.get() cin.getline()
C++学习45 流成员函数put输出单个字符 cin输入详解 get()函数读入一个字符
dengaoxin0873的博客
09-04 515
在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如: cout.put('a');调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符或字符的ASCII代码(也可以...
关于cin输入函数
qq_42637799的博客
06-18 342
本文主要是总结一下自己在c++学习中的一些读取函数的特点以及他们的细节,加入一些自己的理解,以方便之后查阅 关于cin的直接输入符号>> 他是cin对象的一个运算符重载,返回依然是一个istream对象所以可以用连写的方式输入。 他在输入的时候遇到空格,换行符时结束。 在使用的时候他会先洗碗后吃饭,吃完饭后不洗碗: 在使用之初他会先在缓冲区遍历,如果有存在内容那么他会直接读取内容,然后结束。但是如果存在空格或者换行符他会把这两个东西全部从缓冲区扔掉(洗碗),然后继续遍历,直到有内容读完结
cin, cin.get, cin.getline详解输入处理陷阱与原理
在深入探讨C++编程中的标准输入流操作cincin.get以及cin.getline时,我们需要明确它们的基本功能和潜在问题。cin函数作为iostream库的一部分,被广泛用于从标准输入设备(如键盘)读取用户输入,但其行为并非表面...
C++ cin和cout详解:结构体实例应用
在C++编程中,cin和cout是两个核心的输入输出操作对象,分别对应于标准输入设备(如键盘)和标准输出设备(如屏幕)。cin用于从用户获取输入,而cout则用于向控制台输出信息。这两个对象是iostream库的一部分,通过...
C++输入函数详解cin、get、getline与gets的区别
cin输入方法的区分” 在C++编程语言中,输入数据是程序交互的重要部分。本文将详细解释几种常见的输入方法cincin.get()、cin.getline()、getline()、gets()和getchar(),并阐述它们之间的区别和适用场景。 ...
C++赋输入输出详解:赋运算符与cin/cout
C++并没有内置的输入输出语句,而是依赖于标准输入输出库(iostream),其中包含了两个主要的流对象:`cin`用于输入,`cout`用于输出。在编写程序时,我们需要包含`#include<iostream>`来使用这些功能。`cin`和`cout...
C++输入cin详解
07-30
本文将深入解析cin的使用,以及不同输入方法的特点。 首先,理解输入原理至关重要。C++程序在处理输入时,会在内存中设立一个输入缓冲区,当用户按下键盘上的键时,这些字符会被存储到输入缓冲区。cin函数在执行时...
c++ 总结之 cin输入
weixin_60634144的博客
09-17 8945
带你了解输入方法,简介 cin 中类方法的使用,探究并解决因错误输入而导致的无法输入问题,了解流状态以及流状态与cin的相互影响。
C++学习之使用cin进行输入
qq_40801709的博客
04-22 2914
基础 cin对象将标准输入表示为字节流,能够识别大部分的基本类型。 可以将hex,oct,和dec控制符与cin一起使用,来指定将整数输入解释为十六进制、八进制还是十进制。例如cin>>hex; 对于char* 类型的参数,抽取运算符读取输入中的下一个单词,将它放置在指定的地址,并加上一个空字符,使之成为一个字符串。例如: cout<<"Enter your name...
std::cin C++标准输入
hacker_lpy的博客
06-11 1467
用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?下面是我自己的一些补充。
c++中cin如何输入字符串
热门推荐
程序员养成日记
04-12 1万+
1、cin cin会过滤掉不可见字符(如空格、回车、tab等)。 如果不想略过空白字符,可以使用noskipws流控制。 cin>>noskipws>>input[i] 2、cin.get() cin.get()可以用来接收字符 cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格。 c...
C++中使用string保存cin传入的中文数据失败的问题
Curistina的博客
03-12 1083
这个问题的出现是由于中文的编码问题,由于中文是GB2312,而一般string读取字符串会转换为ASCII码,而我在windows系统下编译以下代码时,出现问题最终当我在输入 “abcd”时输出 “abcd”输入 “1234” 输出“1234”而输入“可乐不加糖” 则会输出“ppppp”或者“ ”再或者“00000”,还有“@@@@@”会随机出现这几种结果。查看字符串中保存的东西为对应的ASCII码。在网上寻找结果,应该是跟编码有关,但是在更改了高级保存选项的保存编码后,依然会报错。
cin.get()函数循环读入整行
程序的魅力
03-02 544
从命令行循环读入整行字符串,然后计算输入的总字符个数。演示了cin.get()函数的用法细节。
cin 输入整数死循环问题
学无止境的专栏
10-17 4329
本文,主要解决用标准库输入流std::cin输入整数的时候,如果误输入了字符产生的死循环问题。 这也许是C++灵活的背后,给程序员所带来的一些问题,这个问题标准库的建设者们确实应该考虑升级一下。 最近,见论坛里又常有人问起,方法比较简单,代码如下: #include #include // 带容错功能的控制台整数输入函数 int input_int() { int
写文章

热门文章

  • Linux下查看软件安装路径 28294
  • 5GC 网元介绍(AMF、SMF、UPF、UDM、PCF) 22175
  • c++编译中出现‘vtable for ***未定义的引用解决办法 19275
  • C++11 std::chrono时间库及应用(打印程序耗时等) 14059
  • c语言strcpy()函数 会拷贝’\0’结束符 12953

分类专栏

  • 大话设计模式 3篇
  • 创造型设计模式 4篇
  • 结构型设计模式 7篇
  • 行为型设计模式 11篇
  • 程序员应知应会 119篇
  • C++学习杂项 32篇
  • 算法相关 1篇
  • 设计模式&架构&重构 7篇
  • 未来通信~5G/6G/XG 6篇
  • 通信一点通 23篇
  • python学习 7篇
  • 笔记 2篇
  • 数据结构 2篇
  • C++学习笔记 14篇
  • 工具使用 28篇

最新评论

  • C++程序员应了解的那些事(8) PIMPL模式(指向实现的指针)

    Nnboylhj: 博主打扰了,我看相关的例程是英文的,想问下是否有对应的资料出处呢?

  • 通过scp远程复制 + ipv6 环境下使用scp

    m0_49278166: 完美的文章,没有一句废话,实用

  • 程序员应了解的那些事(111)~进程、线程及堆栈关系

    忽然之间1204: 在汤小丹版《计算机操作系统(慕课版)》第65页中写道“每个线程都可以访问它们所属进程地址空间中的所有地址,一个线程的堆栈可以被其他线程读/写,甚至完全清除。”这也是我没弄明白的,每个线程都有自己的栈,和栈指针,那么这句可以互读互写是什么意思?是一种非法操作?还是一种编程技巧?

  • c++编译中出现‘vtable for ***未定义的引用解决办法

    JZxixi: 原来我的错误也是虚析构函数没实现

  • C++程序员应了解的那些事(93)之odr-used 是什么

    XNB's Not a Beginner: 总结的很好

大家在看

  • 帝国CMS – AutoTitlePic 自动生成文章标题图片插件
  • 帝国CMS7.0 7.2 7.5微信登录插件

最新文章

  • 5G移动性增强关键技术及应用分析【精】【论文】
  • NR 双激活协议栈(DAPS)切换~导入
  • 浅析R16移动性增强那些事儿(DAPS/CHO/MRO)
2024年7篇
2023年30篇
2022年41篇
2021年19篇
2020年173篇
2019年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家太原树箱玻璃钢雕塑制作江门玻璃钢仿真雕塑浙江玻璃钢雕塑摆件售价湖北定制玻璃钢雕塑多少钱兴义玻璃钢雕塑厂家玻璃钢雕塑怎么算价格九江步行街玻璃钢雕塑销售厂家泰州玻璃钢雕塑全国接单江苏高质量玻璃钢雕塑图片湖北公园玻璃钢雕塑优势常用玻璃钢雕塑摆件售价西城区商场美陈效果图安庆水果玻璃钢雕塑制作河南装饰商场美陈批发价重庆 玻璃钢雕塑泰安人物玻璃钢雕塑定制附近校园玻璃钢雕塑定做厂家郑州商场美陈玻璃钢卡通雕塑长沙玻璃钢雕塑设计制作吉安个性化玻璃钢雕塑生产厂家熊猫玻璃钢雕塑厂家四川常用商场美陈价钱河北抽象玻璃钢雕塑设计上街区玻璃钢智能雕塑温州深圳玻璃钢卡通雕塑厂家上海公园玻璃钢雕塑市场玻璃钢卡通牛雕塑报价肇庆玻璃钢雕塑销售厂家榆次修文玻璃钢雕塑生产厂家铜川玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化