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输入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Visual C++程序设计中Windows GDI贴图闪烁的解决方法
这篇文章主要介绍了Visual C++程序设计中Windows GDI贴图闪烁的解决方法,分析了GDI贴图闪烁的常见原因及其具体解决方法,具有一定参考借鉴价值,需要的朋友可以参考下2015-01-01
最新评论