`

【C++ Primer】C++输入cin详解

 
阅读更多

输入原理:

程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

#1:

测试:

abcdefgh (回车)

abcd (输出)

(输出-换行)

【分析】之所以第一次输入完后直接程序就结束了,而不是进行第二次输入,是因为第一次多输入的数据还残留在缓存区中,第二次输入就直接从缓存区中提取而不会请求键盘输入,以下探讨几种常见的输入方式:


一. cin<<

该操作符是根据后面变量的类型读取数据。

输入结束条件 :遇到Enter、Space、Tab键。

对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

#2:



测试:

abcd efgh

输出:

abcd

efgh

【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据,读入操作直接从缓冲区中取数据。
二.cin.get(数组名,长度,结束符)

其中结束符为可选参数,读入的字符个数最多为(长度-1)个,结束符规定结束字符串读取的字符,默认为ENTER

若要读取字符,直接cin.get(char ch)或ch=cin.get()即可

读取字符的情况:

输入结束条件:Enter键

对结束符处理:不丢弃缓冲区中的Enter

cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的,

即:ch=cin.get() 与 cin.get(ch)是等价的。

#3:


测试一输入:

a[Enter]

输出:

a

97 10

【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的’a', 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!
测试二输入:

a b[Enter]

输出:

a

97 32

【分析】显然第一个字符变量取的’a', 第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。

读取字符串的情况:

输入结束条件:默认Enter键(因此可接受空格,Tab键),可在第三个参数上自定义结束符

对结束符处理:丢弃缓冲区中的Enter

#4:


测试一输入:

12345[Enter]

输出:

1234

53

【分析】第一次输入超长,字符串按长度取了"1234",而’5′仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了’5′,所以打印的ASCII值是53(’5′的ASCII值)。
测试二输入:

12d45[Enter]

输出:

12

d

【分析】第二次输出为d,说明自定义结束符时不丢弃缓冲区中的结束符

三.cin.getline()

cin.getline(数组名,长度,结束符) 大体与 cin.get(数组名,长度,结束符)类似。

区别在于:

cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

#5:


测试输入:

12345[Enter]

输出:

1234

-52

【分析】与cin.get()的例子比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52,这里其实cin>>ch语句没有执行,是因为cin出错了!cin的错误处理下次介绍。



分享到:
评论

相关推荐

    C++ Primer读后总结

    ### C++ Primer读后总结知识点详解 #### 一、C++ Primer概述 《C++ Primer》是一本经典的C++编程入门书籍,适合初学者系统学习C++语言的基础知识和高级特性。本书不仅覆盖了C++的基本语法,还深入探讨了面向对象...

    C++primer第四版 电子版

    - **标准输入输出流对象**:C++提供了标准输入输出流对象`cin`和`cout`,分别用于读取输入和输出结果。 - **错误输出流**:`cerr`用于输出错误信息,它不经过缓冲区直接输出到标准错误输出设备;而`clog`则经过缓冲...

    C++Primer Plus(第6版)中文版编程练习答案--第五章

    ### C++ Primer Plus (第6版)中文版编程练习答案--第五章 #### 知识点解析 **一、计算两个整数之间的累加和** **代码片段**: ```cpp #include int main() { using namespace std; int num_big; int num_small...

    C++primer课后习题答案word版

    以上就是C++primer第一章快速入门习题中涉及的一些基本知识点,包括文件命名、main函数、输入输出、操作符使用、代码可读性、语法规则和错误处理等。通过解决这些习题,初学者能够巩固C++的基础概念,并开始熟悉编程...

    C++ Primer 第四版课后习题答案

    《C++ Primer 第四版》是一本广受欢迎的C++学习教材,其课后习题是深入理解并巩固所学知识的重要环节。以下是对各章节主要内容的详细解释: 第一章 快速入门:介绍C++的基本结构,包括如何编写、编译和运行程序,...

    C++Primer课后习题word版

    以上内容是基于《C++ Primer(第4版)》中提及的习题解析,涵盖了C++程序的基本元素、编译过程、基本操作符的使用以及错误处理等核心概念。通过解决这些习题,初学者可以对C++语言有更深入的理解。

    C++ PRIMER 中文版 第四版(特别版)习题解答

    ### C++ Primer 第四版(特别版)习题解答概览 #### 一、C++ 文件类型及命名规范 - **C++ 编译器的要求**:C++ 编译器通常要求待编译的程序保存在文件中。 - **文件分类**:C++ 程序中一般涉及两类文件: - **...

    C++Primer_Plus 第五版习题参考答案 完整

    ### C++ Primer Plus 第五版习题参考答案 #### 知识点概述 根据提供的代码片段,我们可以总结出几个关键的知识点,这些知识点主要集中在C++的基础语法、数据类型、函数定义与调用等方面。 #### 知识点详解 #####...

    C++Primer中文版习题及详细分析.pdf

    【知识点详解】 1. **C++程序结构**:C++程序通常包含头文件和源文件。头文件(如.h或.hpp)通常包含函数声明和宏定义,而源文件(如.cc或.cpp)则包含函数实现和主程序。编译器需要知道文件的正确命名和类型才能...

    C++Primer中文版习题及详细分析.docx

    5. **输入输出操作**:`std::cin`用于从标准输入读取数据,如从键盘输入两个数并计算它们的乘积: ```cpp #include int main() { int v1, v2; std::cout ; std::cin &gt;&gt; v1 &gt;&gt; v2; std::cout * v2 ; return 0;...

    C++ Primer 第四版 第一章 快速入门 习题答案-代码

    ### C++ Primer 第四版第一章快速入门习题分析与代码详解 #### 习题1.1 - 查看编译器文档及文件命名规范 在学习C++编程时,理解所使用的编译器及其文件命名规范至关重要。对于Visual Studio系列编译器而言,头文件...

    C++prinmer答案

    在C++中,可以通过`std::cin`获取用户输入,然后进行计算。 5. **语句拆分**:C++允许将一条复杂的语句拆分成多条简单语句,以提高代码可读性。例如,可以将一个长的输出语句拆分为单独的`std::cout`语句,分别输出...

    c++的小程序

    - 输入/输出流(I/O流):iostream库提供cin和cout进行标准输入输出,fstream库处理文件输入输出。 - 动态内存管理:new和delete关键字用于动态分配和释放内存。 - 标准模板库(STL):包括容器(如vector、list...

    c , c 代码精华

    5. 输入输出流:iostream库中的cin和cout提供了友好的输入输出方式,同时fstream库支持文件操作。 三、学习资源与实践 在学习C与C++的过程中,可以参考《C Programming Language》(K&R)和《C++ Primer》等经典...

    C++Prmer 异常

    ### C++ Primer 异常处理知识点详解 #### 一、异常概述 在C++ Primer中,异常处理是一种用于处理程序运行时错误的机制。当程序遇到不可预见的问题时(例如除以零或内存分配失败等),可以抛出一个异常对象。通过...

    VC基础信息.rar

    为了更好地理解和掌握这些概念,初学者可以参考各种VC++的教程书籍,如《C++ Primer》或《Effective C++》等。同时,动手实践是学习编程的关键,可以尝试编写简单的程序,如数组操作、函数调用和指针练习,以加深...

    cpp代码-C++prime5 1.4.1

    《C++ Primer Plus 5th Edition 1.4.1 知识点详解》 C++ Prime Plus 是一本深入浅出介绍C++编程语言的经典教材,第5版(1.4.1章节)主要涵盖了C++的基础知识和编程概念。在这一章中,我们将深入探讨以下关键知识点...

Global site tag (gtag.js) - Google Analytics