目录

写在前面:

一、输入方式

1.cin>>

2.cin.get()

3.cin.getline()

下面介绍几个string的输入:

4.getline()

5.gets()

6.getchar()

二、输入控制

三、例子


写在前面:

主要注意的包括以下几个点(重要性不分先后):

1.输入参数

2.结束标志

3.是否会将没输入的继续放在输入流

4.返回值

5.针对字符、数字及字符、字符串的哪种情况

一、输入方式

1.cin>>

1)最常见的是获取输入的一个字符数字(后面会介绍只输入字符的情况),如

int a,b;

cin>>a>>b;

注意:cin>>会自动过滤掉不可见字符(如空格 回车 tab等)。

若不想过滤掉空白字符,可以用noskipws流进行控制。如下程序,没有过滤掉不可见字符,输入的空格字符存入了input[1]中,也可输出。

#include<iostream>
using namespace std;
int main()
{int input[5];for (int i = 0; i < 5; i++) cin >> noskipws >> input[i];for (int i = 0; i < 5; i++)cout << input[i] << endl;system("pause");return 0;
}

2)获取输入的字符串,可以用数组或string类型。如

char a[20];cin>>a;cout<<a<<endl;

或者string类型:

string s;cin>>s;cout<<s<<endl;

注意:遇到空格、回车等会结束获取输入的字符串,后面的字符串会过滤掉(存放在输入流中)。如果后面还需要输入字符串,则会从前面存放的字符串开始获取。

比如将输入存在一个数组中,中途若遇见空格,则只会将空格前面的内容放入数组。

#include <bits/stdc++.h>
using namespace std;int main()
{int c[20];cin >> c;cout << c;system("pause");return 0;
}

2.cin.get()

此函数从输入流中读入一个字符(char 非int,如果定义数组或变量为int就会出错!),返回值就是该字符的 ASCII 码。如果碰到输入的末尾,则返回值为 EOF。
EOF 是 End of File 的缩写。istream 类中从输入流(包括文件)中读取数据的成员函数,在把输入数据都读取完后再进行读取,就会返回 EOF。EOF 是在 iostream 类中定义的一个整型常量,值为 -1。
get() 函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。

1)cin.get(字符变量名),用来接收字符,只获取一个字符,可以接收空格,遇回车结束

#include <bits/stdc++.h>
using namespace std;int main()
{char c[20];for (int i = 0; i < 20; i++)cin.get(c[i]);for(int i =0; i < 20; i++)cout << c[i];system("pause");return 0;
}

2)cin.get(数组名,接收字符数目),用来接收字符串,可以接收空格,遇回车结束。

注意:数组的最后一个字符会是‘\0’,设接收字符数目为n,如果输入的字符串大于等于n,则实际接收到的输入是字符串的前面n-1个字符,包括空格(不包括回车,遇到回车就结束了),会自动在后面增加一个‘\0’。所以预设数组大小时要比实际输入大小大1.

注意:此时不需要循环输入了!!!

#include <bits/stdc++.h>
using namespace std;int main()
{char c[3];cin.get(c, 3);cout << c;    //输出只会有2个 因为结尾占位了system("pause");return 0;
}

3)cin.get(),没有参数,主要用于舍弃输入流中不需要的字符,或者舍弃回车,即舍弃输入流中的一个字符(注意!是紧接着的一个字符!)

#include <bits/stdc++.h>
using namespace std;int main()
{char c[3], d[2];cin.get(c, 3);cin.get(d, 2);cout << c << endl;cout << d<< endl;system("pause");return 0;
}

没有用cin.get(),则后面的3会从输入流中继续读入

有cin.get(),则2后面的3被省略了。

#include <bits/stdc++.h>
using namespace std;int main()
{char c[3], d[2];cin.get(c, 3);cin.get();cin.get(d, 2);cout << c << endl;cout << d<< endl;system("pause");return 0;
}

3.cin.getline()

注意:这是读取字符!后面还会介绍getline读取字符串!别搞混了。

getline() 是 istream 类的成员函数,它有如下两个重载版本:

istream & getline(char* buf, int bufSize);
istream & getline(char* buf, int bufSize, char delim);

第一个版本从输入流中读取 bufSize-1 个字符到缓冲区 buf,或遇到\n为止(哪个条件先满足就按哪个执行)。函数会自动在 buf 中读入数据的结尾添加\0

第二个版本和第一个版本的区别在于,第一个版本是读到\n为止,第二个版本是读到 delim 字符为止。\n或 delim 都不会被读入 buf,但会被从输入流中取走。

这两个函数的返回值就是函数所作用的对象的引用。如果输入流中\n或 delim 之前的字符个数达到或超过 bufSize,就会导致读入出错,其结果是:虽然本次读入已经完成,但是之后的读入都会失败。

从输入流中读入一行,可以用第一个版本。用cin >> str这种写法是不行的,因为此种读法在碰到行中的空格或制表符时就会停止,因此就不能保证 str 中读入的是整行。

总结来说就是,接收一个字符串,可以接收空格等,最后一个字符为‘\0’。结束符可以通过设置第三个参数自己设置,默认是回车。m不能为string类型。

经常会遇到需要从输入流中读入一行的情况,可以用第一个版本,因为以回车符为结束标志。用cin >> str这种写法是不行的,因为此种读法在碰到行中的空格或制表符时就会停止,因此就不能保证 str 中读入的是整行。

1)cin.getline(变量名, 输入大小)默认结束方式

#include <bits/stdc++.h>
using namespace std;int main()
{char c[3];cin.getline(c, 3);cout << c << endl;system("pause");return 0;
}

2)自定义结束标志

#include <bits/stdc++.h>
using namespace std;int main()
{char c[5];cin.getline(c, 5, '3');cout << c << endl;system("pause");return 0;
}

下面介绍几个string的输入:

4.getline()

注意:这不是cin.getline() !!!!!.

用于string类的。使用需包含头文件#include<string>。getline(cin,string s),接收一个字符串,可以接收空格、回车等

与cin.getline()的区别:

1.cin.getline()接收输入字符串的是数组,getline()是string类型。

2.cin.getline()可以接收空格,但不能接收回车;getline()可以接收空格和回车

3.cin.getline()会在数组结尾是'\0',getline()不会

// This program illustrates using the getline function
//to read character data into a string object.
#include <iostream>
#include <string> // Header file needed to use string objects
using namespace std;int main()
{string name;getline(cin, name);cout << name << endl;return 0;
}

虽然getline也用了cin,但是他们存在区别:

cin与getline()的区别:

getline()中的结束符,结束后,结束符不放入缓存区;

               cin的结束符,结束后,结束符还在缓存区;

所以在使用 cin 后若要使用 getline() 必须要把前面cin遗留的结束符处理掉,解决方法为:在使用getline()之前,加入一行getline()来处理cin留下的结束符;代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{string str1;int x;cin>>x;getline(cin,str1);while(x--){getline(cin,str1);cout<<str1<<"\n";}return 0;
}

5.gets()

gets(m)用于string类的,需包含#include<string>。可以接收空格,遇回车结束。

#include <iostream>
#include <cstring>//必须是cstring,否则strlen()方法不能用
#include <stdio.h>
using namespace std;int main()
{char a[40000];gets(a);//必须是char型数组,不能是其他类型数组int len=strlen(a);//得到char型数组的实际长度//执行其余操作return 0;
}

可用于多维数组。

  #include<iostream>#include<string>using namespace std;main (){char m[3][20];for (int i = 0; i < 3; i++){cout << "\n请输入第" << i + 1 << "个字符串:" << endl;gets_s(m[i]);}cout << endl;for (int j = 0; j < 3; j++) {int len = strlen(m[j]);//得到char型数组的实际长度for (int k = 0; k < len; k++)cout << "输出m[" << j << k << "]的值:" << m[j][k] << endl;}}

6.getchar()

m=getchar(),需包含#include<string>

getchar()是C语言中的函数,C++中也包含了该函数。getchar()函数的作用是从标准的输入stdin中读取字符。也就是说,getchar()函数以字符为单位对输入的数据进行读取。

在控制台中通过键盘输入数据时,以回车键作为结束标志。当输入结束后,键盘输入的数据连同回车键一起被输入到输入缓冲区中。在程序中第一次调用getchar()函数从输入缓冲区中读取一个字节的数据。需要注意的是,如果此时在程序中第二次调用getchar()函数,因为此时输入缓冲区中还有回车键的数据没有被读出,第二个getchar()函数读出的是回车符。

getchar( )只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。通常可以用它来解决多行输入时存在的回车符(从流中取走回车符)

#include <stdio.h>
#include<ctype.h>
int main() {int N;int num[10000];int j = 0;do {    //因为第一个是数字 第二个才是空格,所以用do 不然会丢失第一个数scanf_s("%d", &num[j++]);} while (getchar() != '\n');scanf_s("%d", &N);for (int i = 0; i < j; i++) {printf("%d ", num[i]);}return 0;
}

二、输入控制

比如输入进制控制:

https://blog.csdn.net/qq_41687938/article/details/116713651?spm=1001.2014.3001.5501

其他一些十分经典的使用方法及实例。

https://blog.csdn.net/qq_41687938/article/details/116535989?spm=1001.2014.3001.5501

三、例子

https://blog.csdn.net/qq_41687938/article/details/116535989?spm=1001.2014.3001.5501

C++最全输入方式总结(cin、get、getchar、getline)相关推荐

  1. (C++)string 的两种输入方式和输出方式

    注:头文件如下 #include<string> #include<cstdio> #include<iostream>using namespace std; 注 ...

  2. matlab全下标方式取出,matlab习题

    matlab习题 1.标点符号; 可以使命令行不显示运算结果,% 用来表示该行为注释行. 2.x为0-4pi,步长为0.1pi的向量,使用命令x=0:0.1*pi:4*pi 创建. 4.输入矩阵A=, ...

  3. C++ stringstream输入方式

    在题目中,我们有时候会遇到不知道要输入多少个元素,这个时候我们要怎么读取呢? 采用stringstream输入方式,头文件为< sstream > 代码如下: #include <i ...

  4. 手动标记用例状态_别再用「六个点」当省略号了,这些标点都有更规范的输入方式...

    引言 在电脑和手机上,文本输入是我们再熟悉不过的操作.但提到输入,很多人首先想到的只是输入文字,而符号--包括标点符号和特殊字符--的输入则往往不太受到重视.观念上,这似乎是一件非常琐碎而简单的事情, ...

  5. 3dmax最全选择方式讲解

    3dmax最全选择方式讲解 在用3dmax建模工作中有一大半的时间是在进行各种选择,活用选择方式会很大提高工作效率. 选择方式在主菜单栏位置:在编辑菜单中.主要分为点击选择,区域选择(框选),按名称选 ...

  6. c语言数据输入方式scanf,【C语言】-数据输入-scanf( )和getchar( )

    格式化输入函数scanf( ) scanf( )功能: 按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数 ...

  7. java用户输入解析_Java中的3种输入方式实现解析

    Java中的3种输入方式实现解析 发布于 2020-8-8| 复制链接 摘记: 这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学 ...

  8. linux 约等于符号,Mac OS X基础教程:特殊符号的快捷输入方式

    对于刚刚接触Mac的用户来说,一些快捷输入的方式可能会是他们想要了解的,特别是在文档中输入一些特别的符号,今天我们就为大家介绍一些符号的快捷输入方式.本文为基础教程,资深用户可略过. 苹果符号 按下S ...

  9. c语言cin输入数组,C++基础:各种输入方法总结cin.get()、

    原标题:C++基础:各种输入方法总结cin.get(). 在C++中,各种输入方法还是不少的,而且各有所异,本文做一点简要总结,主要涉及如下内容:cin.cin.get().cin.getline() ...

最新文章

  1. tensorflow2:tf.app.run()
  2. windows 2003几个优化技巧
  3. apache2和jk和tomcat安装笔记-ubuntu
  4. zookeeper web ui--gt;node-zk-browser安装
  5. redis安装(windows)
  6. 永劫无间最无解振刀,法神推出缴械奇招,距离高手只差一步
  7. Java的Scanner类的next与nextLine用法区别
  8. spring的父子容器
  9. 因为加班,谈了7年的女友跟我分手了……
  10. 剑指offer——二进制中1的个数(c++)
  11. java开发实战经典
  12. java使用rabbitmq
  13. 数据分析~中国五大城市PM2.5数据分析01
  14. qq邮箱发件转发php,phpmailer 利用qq邮箱转发邮件的问题
  15. 在计算机硬盘使用前需要做的工作是,工作电脑的硬盘该如何保养
  16. XLSX转换为DOCX,Aspose.Cells快速搞定
  17. 谷歌浏览器--屏蔽广告插件--净化浏览界面
  18. 使用mdadm创建raid mdadm命令详解_php_sir_新浪博客
  19. lisp正负调换_坐标提取lisp程序 -
  20. 第一个计算出地球周长的人——埃拉托色尼

热门文章

  1. 图解设计模式:抽象工厂
  2. [arm 驱动]Linux输入子系统分析
  3. 《用Python写网络爬虫》——1.5 本章小结
  4. 倒数秒跳转页面实现代码。
  5. poj 2355(简单dp)
  6. java IO(输入输出) 字符流
  7. django下载excel,使用django-excel插件
  8. CentOS下禁止防火墙
  9. JSPServlet学习笔记----第4章
  10. 高德地图-搜索服务-POI搜索