*输入:abcdefg 输出:abcd
接收5个字符到m中,其中最后一个变为’\\0’,所以只看到4个字符输出; *如果把5改成15:
输入:abcd efghl 输出:abcd efghl 【Attention】:
cin.getline()也有三个参数形式:cin.getline(字符数组(或指针)接收字符个数结束字符),此情况下输入遇到结束字符则结束(当第三个参数省略时,系统默认为’\\0’);如果上面的cin.getline(m5)改为cin.getline(m5‘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(cinstring类型的变量) #include #include using namespace std; int main () {
string str;
getline(cinstr); cout<*输入:abc abcdf achd 输出:abc abcdf achd
五、C中介绍的gets()
gets()的用法:读取整行输入(包括空格),直至遇到换行符然后丢弃换行符,储存其余字符,并在这些字符的末尾添加一个空字符;需包含“#include”;可用在多维数组中。 (一般与puts()函数配对使用,puts():在字符串末尾添加换行符后显示字符串) #include using namespace std; int main() {
char m[20]; gets(m);
cout< return 0; }
#include 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< return 0; }
输入:C++ program 输出:C++ program
六、C中介绍的fgets()
1.函数原形:fgets(字符数组首地址(或指针),限定读入的字符个数,文件名(或stdin(标准输入))
需包含头文件;
2.说明:fgets()函数读取整行输入,把换行符放在字符末尾(假设输入行不溢出),通常与fputs()配对使用。(fputs(字符数组名,文件名(或stdout(标准输出)):不在字符串末尾添加换行符)
#include int main(void) {
char words[20]; fgets(words20stdin); fputs(wordsstdout); 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(arrsize)与cin.get(arrsize)的区别
cin.get(arrsize(ch))当遇到Enter时会结束目前输入,他不会删除缓冲区中的[enter] cin.getline(arrsize(ch))当遇到Enter时会结束当前输入,但是会删除缓冲区中的[enter]