[C++] C++ 对cin类中的浅 解析。希望对大家有帮助

cin()类的所有输入函数  她的意思是说
输入的意思是从缓冲区读入字符这个动作
它发生的条件就是按下回车,cin()从缓冲区读入一个字符
但读这个动作是按下ENTER才发生的

C++ 中 iostream 中的类cin 面向行的类成员函数 : getline() 和get()这两个函数都是读取一行的输入,直到到达换行符结束。 
getline()将丢弃换行符,用空字符替代,而get()将换行符保留在输入序列中。

get.line()函数和get()函数都是面向数组的输入 
cin.getline(数组名,数组大小)但是最多输入数组大小参数的减一个字符,最后一个字符用来添加空字符 ‘\0’。
getline()既然是面向行输入所以 即使是 空格也被读取到数组中 不像cin()只是读取一个一个单词 遇到空格 换行……都会结束输入

不论是getline还是get  其实参数的数组名其实就是都是 。。地址

main()
{
  const int size = 20;
  char name[size];
  char dress[size];

  cout <<"输入name\n";
  cin.getline(name,size);
  cout <<"输入 dress \n";
  cin.getline(dress,size);
   
  cout<<"name : " <<name <<endl <<"dress : "<<dress <<endl;


}
----------------------------

cin.get(数组名,数组大小)  由于不丢弃换行符 所以get函数连续两次调用的时候 会把上一次调用get函数的输入的换行符 首相读入到 输入队列中 从而使输入终止。
main()
{
  const int size = 20;
  char name[size];
  char dress[size];

  cout <<"输入name\n";
  cin.get(name,size);
  cout <<"输入 dress \n";
  cin.get(dress,size);
   
  cout<<"name : " <<name <<endl <<"dress : "<<dress <<endl;
}

输入name
li
输入 dress
name : li
dress :
程序会出错
将不能输入dress

-------
但是对于get还有另一种变体  使用不带任何参数的cin.get
cin.get(name,size);
cin.get();
cin.get(dress,size);

main()
{
  const int size = 20;
  char name[size];
  char dress[size];

  cout <<"输入name\n";
  cin.get(name,size);
  cin.get();               // 相当于用get()冲刷了上一次缓冲区中输入队列中的换行符。
  cout <<"输入 dress \n";
  cin.get(dress,size);
   
  cout<<"name : " <<name <<endl <<"dress : "<<dress <<endl;
}

函数也可以这样调用

cin.get(name,size).get();
cin.get(dress,size)

---同理 cin.getline(name,size).getline(dress,size) 同样可以 这样将两行输入分别放到两个数组中。

get()函数的特性使得 更有意义  用get函数可以判断 输入的结束是什么原因造成的 只需要查看数组中最后一个字符是否是换行符就可以知道 。。


=====================
当输入 数组和非数组时 即cin 函数 和cin.get() 同时调用的时候 
main()
{
  int year;
  char name[80];

  cout <<"输入年份\n";
   (cin >> year).get();
   cout << "输入姓名\n";
   cin.get(name,80);

   cout << "year: " << year <<"\n name: " << name <<endl;
           

}

cin函数输入结束后 将回车生成的换行符 留在了输入队列中 当cin.get()调用的时候同样会把换行符读取到输入队列中 所用可以用(cin >> year).get()  将换行符在缓冲区里冲刷掉
在cin之后加一个get()相当于把上一次留在缓冲区的换行符用get()接受了 。所以下一次调用cin.get()就不影响了

=========================

cin() 函数的输入-----非数组-------------深入了解cin函数的输入模式


main()
{
  char ch; //    一次只能存储一个字符
  int count = 0;

  cout << "输入\n";
  cin >> ch;
  while(ch != '#')
  {
   cout <<"000" << ch;
   
   count ++;
   cin >> ch;
  
  }


  cout <<endl << "最后输出ch = " <<ch <<endl;

  

}
第一种输入方法:

输入
a
000a
b
000b
c
000c
d
000d
#

最后输出ch = #
4

==========输入一次执行一次循环。。因为回车 生成换行符,cin函数中换行符表示输入结束,故执行循环。而ch字符变量只能存储一个字符所以最好输出时‘#’

-------------
第二种输入方法: 

输入
abc d#
000a
000b
000c
000d

最后输出ch = #
4

这种是先全部输入完毕包括‘#’,并且有空格(只用在数组中空格表结束数组的存储,所以空格并没有使输入结束 并且忽略了空格,包括换行符,这也是cin函数的特性);当把字符都输入完后 回车结束cin函数的输入    进入循环 。。循环使实际并没有到 ch变量存储的数据哪里读取字符 ,而是到输入队列中去读取的字符 从第一次输入的字符开始读取  一次只读取一个字符 当遇到‘#’时结束循环 这才有了第二种输入的结果。 其中遇到的空 已经被cin函数忽略 换句话说 已经在cin输入队列中删除或不存在了 。。。。

cin 函数进行输入时 遇到空格 换行符 等作为结束边界  cin在获取 字符串数组的输入时 遇到空格则结束存储 但仍可以继续输入,只不过输入被放在缓冲区中
----------------


#include<string>  // 必须用string 类
main()
{
int a = 0;
string ch;
cout <<"输入单词\n";
while(cin >>ch && ch != "done")
   a++;

cout << "共输入了 :" << a <<"个单词\n";


}

输入单词
abc def opq done
共输入了 :3个单词
----------------------
此程序 也是在循环条件中  通过在输入队列中查找 符合条件的“done”。

通过cin输入的内容,只用在用户按下回车键后 出入的内容才会被发送给程序。发送时会将整个字符序列发送给程序,当程序会按照程序的 语句来判断读取的内容。。。


-------------===========cin.get(字符变量)==========重点~!!!===============

要想输出一段 内容 包括空格 用cin.getline()和cin.get() 前提 参数必须是 数组。。。。。。。
cin类中另一个函数参数版本 cin.get(字符变量) 即可完成 不用使用复杂的数组

main()
{
  char ch;
  int num = 0;

  cout <<"输入字符串\n";
       
  cin.get(ch);


  while(ch != '#')
  {
        cout << ch;
        num++;
        cin.get(ch); // 意思是从缓冲区读入一个字符,放到ch中,相当于给 ch又赋了一次值
  
                                      
  }
  cout <<endl <<num << "个字符"<<endl;
  cout <<"此时ch 变量中存储的数据是 :" << ch <<endl;
  

}


输入字符串
abc def opq#

abc def opq
11个字符
此时ch 变量中存储的数据是 :#
-----------

#include<iostream>
using namespace std;
main()
{
  char ch;
  int num = 0;

  cout <<"输入字符串\n";

  cin.get(ch);
  cout << ch << endl;//这样加一句然后分析下
  while(ch != '#')
  {
  cout << ch;
  num++;
  cin.get(ch); // 从缓冲区读入一个字符  //意思是从缓冲区读入一个字符,放到ch中,相当于给 ch又赋了一次值
  }
cout <<endl <<num << "个字符" <<endl;
}
/*
这个输入的意思是从缓冲区读入字符这个动作
它发生的条件就是按下ENTER
getch()从缓冲区读入一个字符
但读这个动作是按下ENTER才发生的*/

看一看出  ch是字符变量 只能存储一个字符而已 但是在cin函数的缓冲区中却存放着输入队列中的一系列字符串(包括空格) ,ch !=‘#’这个判断条件是从输入队列中找的数据,

==============

( 数组中!)  C和C++ 的 scanf() 和 cin() 函数 读取字符串时候 都是 读取一个单词,即使用 空白 、空格、制表符、和换行符来确定字符串的边界

/* #include<iostream>

main()
{
  using namespace std;
  char name[100];
  cout << "输入字符串" << endl;
  cin >> name;
  int a = 0;
  while(name[a] != '\0')
  {
          cout << name[a];
          a ++ ;
  }
}

#include <stdio.h>

main()
{
char name[100];
printf("输入字符串\n");
scanf("%s",name);
printf("字符串是: %s ",name);

}
                                                                                                                  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值