2021-10-23

C++学习笔记(7)

1.输入操作的原理:程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的:当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是为什么会出现输入语句失效的原因。

一.cin<<该操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab) 读字符.

二.cin.get()该函数有三种格式:无参,一参数,二参数即cin.get(), cin.get(char ch), cin.get(array_name, Arsize) 读取字符的情况:输入结束条件:Enter键。对结束符处理:不丢弃缓冲区中的Enter。
(补充:cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的,即:ch=cin.get() 与 cin.get(ch)是等价的。)
例:
#include
using namespacestd;
int main(){
char c1, c2;
cin.get(c1);
cin.get(c2);
cout<<c1<<""<<c2<<endl; // 打印两个字符 cout<<(int)c1<<""<<(int)c2<<endl; // 打印这两个字符的ASCII值
return 0;
分析:测试一输入:a[Enter]输出:a 97 10【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的’a’,第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!
测试二输入:a b[Enter]输出:a 97 32【分析】显然第一个字符变量取的’a’,第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。

三、cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。
可以接受空格;输入超长则按所需长度取值,Arsize为开区间。
例:
#include
using namespacestd;
int main (){
char ch, a[20];
cin.get(a, 5);
cin>>ch;
cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
} //测试一输入:12345[Enter]输出:123453【分析】第一次输入超长,字符串按长度取了"1234",而’5’仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了’5’,所以打印的ASCII值是53('5’的ASCII值)。 测试二输入:1234[Enter]a[Enter]输出:123497【分析】第二次输入有效,说明该函数把第一次输入后的Enter丢弃了!

四.cin.getline()与 cin.get(array_name,Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。按照长度(Arsize)读取字符, 丢弃最后的Enter字符。但是这两个函数是有区别的:cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

2.循环语句,自动实现判断和跳转,重复执行的操作称为循环体,执行重复操作的条件称为循环条件或循环控制条件。

3.while语句:当型循环。常用于根据条件执行而不需要关注循环次数的情况。
形式:
while(表达式)
{
循环体
}

上一篇:快捷键


下一篇:Vue基础知识