目录
写在前面:
一、输入方式
1.cin>>
2.cin.get()
3.cin.getline()
下面介绍几个string的输入:
4.getline()
5.gets()
6.getchar()
二、输入控制
三、例子
主要注意的包括以下几个点(重要性不分先后):
1.输入参数
2.结束标志
3.是否会将没输入的继续放在输入流
4.返回值
5.针对字符、数字及字符、字符串的哪种情况
1)最常见的是获取输入的一个字符或数字(后面会介绍只输入字符的情况),如
int a,b;
cin>>a>>b;
注意:cin>>会自动过滤掉不可见字符(如空格 回车 tab等)。
若不想过滤掉空白字符,可以用noskipws流进行控制。如下程序,没有过滤掉不可见字符,输入的空格字符存入了input[1]中,也可输出。
#include
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<
或者string类型:
string s;
cin>>s;
cout<
注意:遇到空格、回车等会结束获取输入的字符串,后面的字符串会过滤掉(存放在输入流中)。如果后面还需要输入字符串,则会从前面存放的字符串开始获取。
比如将输入存在一个数组中,中途若遇见空格,则只会将空格前面的内容放入数组。
#include
using namespace std;
int main()
{
int c[20];
cin >> c;
cout << c;
system("pause");
return 0;
}
此函数从输入流中读入一个字符(char 非int,如果定义数组或变量为int就会出错!),返回值就是该字符的 ASCII 码。如果碰到输入的末尾,则返回值为 EOF。
EOF 是 End of File 的缩写。istream 类中从输入流(包括文件)中读取数据的成员函数,在把输入数据都读取完后再进行读取,就会返回 EOF。EOF 是在 iostream 类中定义的一个整型常量,值为 -1。
get() 函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。
1)cin.get(字符变量名),用来接收字符,只获取一个字符,可以接收空格,遇回车结束
#include
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
using namespace std;
int main()
{
char c[3];
cin.get(c, 3);
cout << c; //输出只会有2个 因为结尾占位了
system("pause");
return 0;
}
3)cin.get(),没有参数,主要用于舍弃输入流中不需要的字符,或者舍弃回车,即舍弃输入流中的一个字符(注意!是紧接着的一个字符!)。
#include
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
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;
}
注意:这是读取字符!后面还会介绍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
using namespace std;
int main()
{
char c[3];
cin.getline(c, 3);
cout << c << endl;
system("pause");
return 0;
}
2)自定义结束标志
#include
using namespace std;
int main()
{
char c[5];
cin.getline(c, 5, '3');
cout << c << endl;
system("pause");
return 0;
}
注意:这不是cin.getline() !!!!!.
用于string类的。使用需包含头文件#include
与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
#include // 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
using namespace std;
int main()
{
string str1;
int x;cin>>x;
getline(cin,str1);
while(x--){
getline(cin,str1);
cout<
gets(m)用于string类的,需包含#include
#include
#include //必须是cstring,否则strlen()方法不能用
#include
using namespace std;
int main()
{
char a[40000];
gets(a);//必须是char型数组,不能是其他类型数组
int len=strlen(a);//得到char型数组的实际长度
//执行其余操作
return 0;
}
可用于多维数组。
#include
#include
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"<
m=getchar(),需包含#include
getchar()是C语言中的函数,C++中也包含了该函数。getchar()函数的作用是从标准的输入stdin中读取字符。也就是说,getchar()函数以字符为单位对输入的数据进行读取。
在控制台中通过键盘输入数据时,以回车键作为结束标志。当输入结束后,键盘输入的数据连同回车键一起被输入到输入缓冲区中。在程序中第一次调用getchar()函数从输入缓冲区中读取一个字节的数据。需要注意的是,如果此时在程序中第二次调用getchar()函数,因为此时输入缓冲区中还有回车键的数据没有被读出,第二个getchar()函数读出的是回车符。
getchar( )只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。通常可以用它来解决多行输入时存在的回车符(从流中取走回车符)
#include
#include
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