写在前面:以下为个人学习记录,如有错误,欢迎指出交流!
一、cin>>
用法1:输入一个数字或字符
#include <iostream>
using namespace std;
main ()
{
int a;
char b;
cin>>a>>b;
cout<<a<<" "<<b<<endl;
return 0;
}
输入&输出:5 c
用法2:接收一个字符串,遇“空格”、“Tab”、“Enter”就结束
#include <iostream>
using namespace std;
int main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
return 0;
}
*输入:abcdef 输出:abcdef
输入:abchj libg //遇空格结束 输出:abchj
二、cin.getline()
用法:接收一个字符串,可以接收空格并输出
二参数函数原形:cin.getline(char [],n)
#include <iostream>
using namespace std;
int main ()
{
char m[20];
cin.getline(m,5);
//char* m;m=new char[20];cin.getline(m,5);
cout<<m<<endl;
return 0;
}
*输入:abcdefg 输出:abcd
接收5个字符到m中,其中最后一个变为’\0’,所以只看到4个字符输出;
*如果把5改成15:
输入:abcd efghl 输出:abcd efghl
【Attention】:
cin.getline()也有三个参数形式:cin.getline(字符数组(或指针),接收字符个数,结束字符),此情况下输入遇到结束字符则结束(当第三个参数省略时,系统默认为’\0’);如果上面的cin.getline(m,5)改为cin.getline(m,5,‘d’),则输出结果为abc。
三、cin.get()(用法与cin.getline类似)
1.(一参数)cin.get(ch):读取一个字符,赋值给ch,读取成功返回非0值,读取失败(遇到文件结束符)返回0。
2.(二参数)cin.get(字符数组首地址,字符个数n);
3.(三参数)cin.get(字符数组(或指针),字符个数n,终止字符)读取n-1个字符,若在n-1个字符之前遇到终止字符,提前结束读取。
另:cin.get():从指定的输入流中提取一个字符,函数的返回值就是这个字符。文件结束符会返回EOF,一般以-1代表EOF。
四、getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include”
函数原形:getline(cin,string类型的变量)
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
return 0;
}
*输入:abc abcdf achd
输出:abc abcdf achd
五、C中介绍的gets()
gets()的用法:读取整行输入(包括空格),直至遇到换行符然后丢弃换行符,储存其余字符,并在这些字符的末尾添加一个空字符;需包含“#include”;可用在多维数组中。
(一般与puts()函数配对使用,puts():在字符串末尾添加换行符后显示字符串)
#include<iostream>
using namespace std;
int main()
{
char m[20];
gets(m);
cout<<m<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
char m[4][15];
for(int i=0;i<4;i++)
{
gets(m[i]);
}
for(int i=0;i<4;i++)
{
cout<<m[i]<<endl;
}
return 0;
}
输入:C++ program
输出:C++ program
六、C中介绍的fgets()
1.函数原形:fgets(字符数组首地址(或指针),限定读入的字符个数,文件名(或stdin(标准输入))
需包含头文件<stdio.h>;
2.说明:fgets()函数读取整行输入,把换行符放在字符末尾(假设输入行不溢出),通常与fputs()配对使用。(fputs(字符数组名,文件名(或stdout(标准输出)):不在字符串末尾添加换行符)
#include<stdio.h>
int main(void)
{
char words[20];
fgets(words,20,stdin);
fputs(words,stdout);
return 0;
输入:apple pie
输出:apple pie
七、Attentions
1、cin.getline()属于iostream流,而getline()属于string流,是不一样的两个函数
2、在cin.get(),cin.getline(),getline()使用之前出现“使用cin>>输入数据”,为避免读入之前输入数据结束的回车键,应在前后者间加入cin.ignore()或cin.get()用于吸收上一次输入的回车符(将回车符作为输入流cin以清除缓存),如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
3、cin.getline(arr,size)与cin.get(arr,size)的区别
cin.get(arr,size(,ch))当遇到Enter时会结束目前输入,他不会删除缓冲区中的[enter]
cin.getline(arr,size(,ch))当遇到Enter时会结束当前输入,但是会删除缓冲区中的[enter]