cin()类的所有输入函数 她的意思是说
输入的意思是从缓冲区读入字符这个动作
它发生的条件就是按下回车,cin()从缓冲区读入一个字符
但读这个动作是按下ENTER才发生的
C++ 中 iostream 中的类cin 面向行的类成员函数 : getline() 和get()这两个函数都是读取一行的输入,直到到达换行符结束。
getline()将丢弃换行符,用空字符替代,而get()将换行符保留在输入序列中。
get.line()函数和get()函数都是面向数组的输入
cin.getline(数组名,数组大小)但是最多输入数组大小参数的减一个字符,最后一个字符用来添加空字符 ‘ ’。
getline()既然是面向行输入所以 即使是 空格也被读取到数组中 不像cin()只是读取一个一个单词 遇到空格 换行……都会结束输入
不论是getline还是get 其实参数的数组名其实就是都是 。。地址
main()
{
const int size = 20;
char name[size];
char dress[size];
cout <<"输入name
";
cin.getline(name,size);
cout <<"输入 dress
";
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
";
cin.get(name,size);
cout <<"输入 dress
";
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
";
cin.get(name,size);
cin.get(); // 相当于用get()冲刷了上一次缓冲区中输入队列中的换行符。
cout <<"输入 dress
";
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 <<"输入年份
";
(cin >> year).get();
cout << "输入姓名
";
cin.get(name,80);
cout << "year: " << year <<"
name: " << name <<endl;
}
cin函数输入结束后 将回车生成的换行符 留在了输入队列中 当cin.get()调用的时候同样会把换行符读取到输入队列中 所用可以用(cin >> year).get() 将换行符在缓冲区里冲刷掉
在cin之后加一个get()相当于把上一次留在缓冲区的换行符用get()接受了 。所以下一次调用cin.get()就不影响了
=========================
cin() 函数的输入-----非数组-------------深入了解cin函数的输入模式
main()
{
char ch; // 一次只能存储一个字符
int count = 0;
cout << "输入
";
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 <<"输入单词
";
while(cin >>ch && ch != "done")
a++;
cout << "共输入了 :" << a <<"个单词
";
}
输入单词
abc def opq done
共输入了 :3个单词
----------------------
此程序 也是在循环条件中 通过在输入队列中查找 符合条件的“done”。
通过cin输入的内容,只用在用户按下回车键后 出入的内容才会被发送给程序。发送时会将整个字符序列发送给程序,当程序会按照程序的 语句来判断读取的内容。。。
-------------===========cin.get(字符变量)==========重点~!!!===============
要想输出一段 内容 包括空格 用cin.getline()和cin.get() 前提 参数必须是 数组。。。。。。。
cin类中另一个函数参数版本 cin.get(字符变量) 即可完成 不用使用复杂的数组
main()
{
char ch;
int num = 0;
cout <<"输入字符串
";
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 <<"输入字符串
";
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] != ' ')
{
cout << name[a];
a ++ ;
}
}
#include <stdio.h>
main()
{
char name[100];
printf("输入字符串
");
scanf("%s",name);
printf("字符串是: %s ",name);
}