C++ cin输入的多种方法详解

 更新时间:2021年09月27日 09:18:01   作者:Jxiepc  
cin是C++编程语言中的标准输入流对象,即stream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。接下来通过本文给大家分享C++ cin输入的几种方式,一起看看吧

前言

在C++中一般使用cin来进行交互,获取用户输入信息。cin是C++编程语言中的标准输入流对象,即stream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。主要用到有cin >>cin.get()cin.getline()。cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据

一、cin

1、cin >>

支持连续读取,以Tab、空格为分隔符,换行符为结束符号;

/*----------------------------------------------------------------------
     > File Name: cinDemo01.cpp
     > Author: Jxiepc
     > Mail: Jxiepc
     > Created Time: Mon 20 Sep 2021 10:09:55 AM CST
 ----------------------------------------------------------------------*/
 
#include<iostream>
#include<unistd.h>
#include<cstring>


int main(int argc, char *argv[]){
     std::string s;
     while(std::cin >> s){
         std::cout << s << std::endl;
     }                                                                                                               
     return 0;
}

cin>>从缓存区读取数据时,会自动忽略作为第一个字符存在的Tab、空格(Space)、换行,继续读取下一个字符,若缓存区为空,则等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

在这里插入图片描述

2、cin.get()

读取字符,包含空格

/*----------------------------------------------------------------------
	> File Name: cinGetDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 10:20:59 AM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>
#include<fstream>


void test02(){

	char str[256];

	std::cout << "Enter the name of an existing text file: ";
    std::cin.get (str,256);    // get c-string
	
	std::ifstream is(str);     // open file
	  
	char c;
	while (is.get(c))          // loop getting single characters
	    std::cout << c;
				  
	is.close();                // close file	
}

void test01(){
	char a,b; 
	a = std::cin.get();
	std::cout << "a:" << a <<std::endl;

	std::cin.get(b);
	std::cout << "b:" << b << std::endl;
}

int main(int argc, char *argv[]){
	std::cout << "测试字符..." << std::endl;

	test01();
	std::cout << "--------------------------------------" << std::endl;
	//sleep(1);
	//std::cout << "测试get读取文件" << std::endl;
	//test02();	

	return 0;
}

在这里插入图片描述
在这里插入图片描述

2.1 函数介绍

int get();
istream& get(char&c);
/*
* @func:- 单个字符;	
* 		 - 不会忽略分隔符;
* 		 - 成功读取的时候则返回字符的ASCII码值,遇到文件结束符时则返回EOF(-1);
*/

istream& get (char* s, streamsize n);
istream& get (char* s, streamsize n, char delim);
/*
* @func: - 从在流提取C-串,直到(n-1)字符已被提取或定界字符结束。('\n')或DELIM(自定义)。
* 		 - 若找到定界符则不会从输入序列中提取,并保留作为从流中提取的下一个字符。
* 		 - 如果n大于0,即使提取的是空字符串,也会自动添加一个空字符('\0')到写入序列。
* @param s:接收字符串;
* @param n:- 写入s的最大字符数(包括终止空字符);
* 			- 若小于2,则函数不提取任何字符并设置failbit;
* 			- Streamsize是一种带符号的整型。  
* @param delim:自定义结束符。
*/

istream& get(streambuf&sb);
istream& get (streambuf& sb, char delim);
/*
* @func:- 从流中提取字符,并将其插入到输出序列流缓冲区对象控制的某人,('\n')或DELIM(自定义)。 
* 		 - 只有成功插入的字符才会从流中提取。分隔字符,还是最终未能插入的字符,保留在那里作为下一个要从流中提取的字符。  
*/

3、getline()

从标准输入设备读取一串字符串,并以指定的结束符结束。

/*----------------------------------------------------------------------
	> File Name: cinGetlineDemo.cpp
	> Author: Jxiepc
	> Mail: Jxiepc
	> Created Time: Mon 20 Sep 2021 11:08:17 AM CST
----------------------------------------------------------------------*/

#include<iostream>
#include<unistd.h>
#include<cstring>


void test01(){

	char name[200];
	

	std::cout << "请输入:" ;
	std::cin.getline(name, 200);
	std::cout << name << std::endl;	
}

int main(int argc, char *argv[]){
	
	test01();

	return 0;
}

在这里插入图片描述

函数介绍

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

/*
* @func:- 从流中提取字符作为未格式化的输入,并将它们以c字符串的形式存储到s中,直到提取的字符成为分隔符,或者有n个字符被写入s中(包括结束的空字符);
* 		 - 如果到达文件结束符,该函数也将停止提取字符;
* 		 - 若n大于0,提取到空串,也会自动添加一个空字符('\0')到写入序列。  
* @param s:指向字符数组的指针,在该数组中提取的字符存储为c字符串;
* @param n:写入s的最大字符数(包括终止空字符);
* @param delim:结束符;
*/

到此这篇关于C++ cin输入的几种方式的文章就介绍到这了,更多相关C++ cin输入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中循环嵌套的应用方式

    C语言中循环嵌套的应用方式

    这篇文章主要介绍了C语言中循环嵌套的应用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • qt首次连接MYSQL驱动的各种问题图文详解

    qt首次连接MYSQL驱动的各种问题图文详解

    通常来说,我们对数据库的操作更多地在于对数据库表的操作,下面这篇文章主要给大家介绍了关于qt首次连接MYSQL驱动的各种问题,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 超详细VScode调试教程tasks.json和launch.json的设置

    超详细VScode调试教程tasks.json和launch.json的设置

    vscode是一个轻量级的文本编辑器,但是它的扩展插件可以让他拓展成功能齐全的IDE,这其中就靠的是tasks.json和launch.json的配置,下面这篇文章主要给大家介绍了关于超详细VScode调试教程tasks.json和launch.json设置的相关资料,需要的朋友可以参考下
    2022-10-10
  • C++三元表达式详情

    C++三元表达式详情

    这篇文章主要介绍了C++三元表达式,文章围绕C++三元表达式的相关资料展开详细内容,需要的朋友可以参考一下,希望多你有所帮助
    2021-11-11
  • C++利用 _findfirst与_findnext查找文件的方法

    C++利用 _findfirst与_findnext查找文件的方法

    这篇文章主要给大家介绍了关于C++利用 _findfirst与_findnext查找文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • 简单讲解哈希表

    简单讲解哈希表

    本文主要介绍了哈希表简单知识及C语言实现哈希表实例,文中利用图片以及代码简单讲解了相关知识,感兴趣的小伙伴可以多多学习这篇文章
    2021-09-09
  • C++中与输入相关的istream类成员函数简介

    C++中与输入相关的istream类成员函数简介

    这篇文章主要介绍了C++中与输入相关的istream类成员函数简介,包括eof函数和peek函数以及putback函数还有ignore函数,需要的朋友可以参考下
    2015-09-09
  • C++结构体作为函数参数传参的实例代码

    C++结构体作为函数参数传参的实例代码

    这篇文章主要介绍了C++结构体作为函数参数传参的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • C语言实现猜数字小项目

    C语言实现猜数字小项目

    这篇文章主要为大家详细介绍了C语实现猜数字小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言全面讲解顺序表使用操作

    C语言全面讲解顺序表使用操作

    线性表是最简单的数据结构,而顺序表又是最简单的线性表,其基本思想是用一段地址连续的储存单元依次存储线性表的数据元素,比如我们常用的一维数组,下面代码实现了顺序表的定义以及基本操作
    2022-04-04

最新评论