关于 cin cin.get() cin.getline getline() 的理解。

缓冲区:当输入一个串时,如果意外停止。则遇到第二次请求输入操作时,程序将不理会输入操作而直接从缓冲区读入字。


一、cin

          头文件(iostream)。输入字符时遇到空字符(空格,回车,tab制表符)自动停止。所以不可用于输入带有空格的字符串。

  •   输入流不会保留空字符,只是遇到后自动结束输入。

二、cin.get(字符数组名,长度,结束符号)

        头文件 (iostream)。结束符号默认为ENTER(回车)。

      ①:接受一个字符时候: char ch;   ch=cin.get()或者cin.get(ch); 遇到结束符时,在缓冲区中存储并不会丢弃。注意:当连续使用2次该语句时,若输入一个字符回车。输出为“那个字符”,“回车”。所以可以利用此性质,在多个未知个数字符串的录入操作中,跳出循环。下例:

#include<iostream>
#include<string>
using namespace std;
int main()
{
 string a[80];
 char c;
 int i;
 for (i=0;i<80;i++)
 {
 cin>>a[i];
 c=cin.get();
 if (c=='\n')break;
 }
 for (int j=i;j>=1;j--)
 cout<<a[j]<<" ";
 cout<<a[0];
 return 0;
}

这是逆序输出字符串的代码。

②:接受字符数组—— cin.get(数组名,数组长度,结束符)。仅能读取(长度-1)个字符,最后一个是结束符。

         同理,任然符合缓冲区的性质。

#include<iostream>
using namespace std;
int main()
{
 char c[10];
 cin.get(c,6);//除回车外只能存入5个字符,默认enter回车为结束符。
 cout<<c<<endl;
 char a;
 cin.get(a);
 cout<<a;
 return 0;
}

输入:zifuchuan 回车

输出:zifuc

           h    //验证了仅能读取(长度-1)个字符,而且后续字符huan被存入缓冲区。

输入:zif回车

输出:zif

           回车//验证仅输出结束符之前的串,且结束符自身任然在缓冲区内。

若将cin.get(c,6);变为cin.get(c,   6,‘m’);

输入:zifmzif回车

输出:zif

           m//同理。

三、cin.getline(字符数组名,长度,结束符号)

       与cin.get()不同,它不会保留结束符在缓冲区中,而是丢弃。

四、getline(cin,  string类型名字,结束符号)

#include<iostream>
#include<string>
using namespace std;
int main()
{
 string str;
 getline(cin, str, 'a');
 cout<<str;
 return 0;
}

输入:string string回车

           string stringa回车

输出: string string

            string string

这是string类专属的输入方法,不用指定长度,自动变换。遇到回车默认结束。(getline)函数会抛弃结束符。



五、gets(), puts(), getc(), putc()

    这些都是C语言的输入输出函数,需要加入2个头文件(stdio.h)和(string.h)。此外,puts()函数输出是自动输出一个回车换行。

    综上所述,五种输入输出函数中只有cin遇到空字符自动结束,其余均对空字符有很大的宽容性。只有cin.get保留结束符,其余均抛弃结束符号。

发布了11 篇原创文章 · 获赞 3 · 访问量 327

猜你喜欢

转载自blog.csdn.net/qq_41709835/article/details/79429180
今日推荐