知识点
缓冲区
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入
cin读入
输入结束条件:遇到Enter、Space、Tab键等结束读入,丢弃缓存区的的Enter,Space,Tab等使得输入结束的结束符
scanf读入疑问
C语言的scanf()函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的输入字符数据
解决:
1.getchar(); //专门用来读取上次输入的回车符号;
2.scanf(” %c”,&c); //%c前面加空格,过滤回车(推荐)
cin.get()
cin相关函数的特点:
1.cin>> ,cin.get(), cin.getline() 会把换行/回车符留在缓冲区中,而cin.get(), cin.getline(), getline()
(没有cin>> 哟)会读入换行符;
2.在使用了cin>>, cin.get(), cin.getline() 后,如果想正常使用 getline,需要将缓冲区的换行符读掉;
相关方法:
在将要输入的内容用getline 读到string前,可以用:
getline(cin,string);
getchar();
cin.get();
cin.ignore(100,’\n’);
这个细节
有点恶心
写的挺好的
第一行cin.get(), cin.getlin(), 你说会吧换行留着缓冲区内,后面又说cin.get(), cin.getlin()会读入换行符是不是矛盾了呀
这里的意思是读入后还会保留在输入队列中