C++零碎知识点小记
Comma Lv1

说点什么

好久没更新博客了,不能闲置了。

每次打代码,修BUG都会有一些小收获,于是我就打算在这里记录我每次学到的零碎知识点。

本人表达能力有限,若有不当之处,欢迎指正。

11月29日小记

今晚在写哈夫曼树的编码解码的时候,遇到了个问题。

因为可能需要编码译码空格,而在C++中,空格通常会是个特殊的存在。

在输入字符的时候,我选择了getline()函数获取一行输入。(dev能直接使用,vs则需要引用库)

以下是测试代码:

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main(){
int n;
string str;
cin>>n; //输入n个字符
getline(cin,str); //getline(infile,str); getline还能对文件进行读行操作
cout<<str[0]<<"."<<str[2]<<endl;
cout<<str.length();
return 0;
}

这段代码运行后会发现getline()并没有获取输入文本。

这是因为在C++中,使用cin读取数据后,再使用getline读字符串,发现缓冲区中还有endl,便进行读入操作,所以后面没能继续读入我们所需要的文本。

解决方法:在两者之间加入cin.ignore();,这样就能清空缓冲区了。

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main(){
int n;
string str;
cin>>n; //输入n个字符
cin.ignore(); //清空缓冲区,防止getline读取endl
getline(cin,str);
cout<<str[0]<<"."<<str[2]<<endl;
cout<<str.length();
return 0;
}
  • Post title:C++零碎知识点小记
  • Post author:Comma
  • Create time:2021-11-29 22:40:39
  • Post link:https://imcomma.top/2021/11/29/c-ling-sui-zhi-shi-dian-xiao-ji/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments