最近在做题的时候,遇到了一些之前不会的知识点,所以写一篇文章总结一下
这个函数用于读取数据 并将数据存入字符数组中
常用于解决输入带有空格的语句
gets()的作用和它类似,但gets()在标准中已经被废弃 虽然现在仍可以使用 但还是建议使用getline()
getline()函数直到遇到指定的停止符或读取到指定的字符数量才会停止读取(说明可以设定读入的字符数量)
而gets()函数直到遇到换行符或读取到文件结束符才会停止读取
并且 getline()函数在读取字符时会检查缓冲区溢出 ,它通过将读取的字符存储在由用户提供的缓冲区中,并在读取完毕后添加空字符来保证安全性。
cin用于输入数据,我最近发现了它的一个特性,(大概可以算作是特性吧)
下面先来看看一段代码
#include
int main()
{
int a;
char ch;
if (!(std::cin >> a))
//注释1
{
std::cin.clear();
//注释2
std::cin >> ch >> a;
//注释3
}
return 0;
}
这个可以算是cin的一个特点吧
当输入类型和变量的类型不同时,比如a是int类型,我传进去一个字符 这么写其实是有问题的 程序不会继续读入 它会将输入的数据保存在缓冲区
clear函数
有两个用途:
清空容器中的所有元素,比如vector
另一个用途,清除输入流中的错误标志
上面在注释1中,因为类型不匹配,就产生了错误信息
使用clear函数清除错误信息 就可以继续输入
在这里补充一下另一个函数:sync
sync函数可以将缓冲区的数据直接存入磁盘
感兴趣的可以了解一下 不做过多介绍
在操作系统中,除非设置了自动同步,否则在写入文件时,数据并不会即时写入到磁盘中,而是先写入内存中的系统缓冲区。当系统缓冲区的数据积累到一定数量后,会有系统进程一次性将缓冲区中的数据写入磁盘。这样,如果在数据写入磁盘之前发生意外断电,那么系统缓冲区内的数据将会丢失。
因此,在一些需要确保数据不会丢失或损坏的重要场合,如在写入一些重要数据后,通常会在写入结束后调用sync函数,以确保数据被写入磁盘。
需要注意的是,sync函数返回0表示同步成功,如果返回-1则表示同步失败。同时,即使sync函数已经返回,并不代表写入磁盘的过程已经结束,仍然可能会出现故障。对于可靠性要求比较高的应用,通常会使用更加可靠的同步IO方式,如fsync和fdatasync。
这其实是利用cin,然后直接从缓冲区读取(scanf也可以)
这个知识点我之前一直都不知道 所以记录一下
了解了这个知识点 做下面这道题就很轻松了
P1957 口算练习题
当我写出如下代码的时候,编译器报错了
char array[20] = { nullptr };
我心想,nullptr不就是空指针吗,凭什么不能用于初始化C语言风格的字符串
后来,经过学习我才知道,NULL和nullptr是有很大区别的
C风格字符串是字符指针,其末尾是一个空字符(‘\0’)。
nullptr在C++中是一个特殊的指针值,表示指针不指向任何对象。尽管nullptr可以被用来初始化C风格字符串的指针,但是,你不能直接将nullptr赋值给一个C风格字符串。
并且 NULL和nullptr是有一定的区别的
在定义上:
NULL其实是int类型 他是用宏定义的
nullptr是一个指针类型,是一个真正的关键字
所以,这也许就是nullptr比NULL更安全的原因之一
stoi函数的作用是 将字符串转换成int类型的数据
被包含在
下面给出一个例子
#include
#include
#include
using namespace std;
int main()
{
string str = "12345";
cout << typeid(str).name() << endl;
int num = stoi(str);
cout << num << endl;
cout << typeid(num).name() << endl;
return 0;
}
补充:
对于不清楚typeid关键字的同学 可以去查一下 它的作用是获取一个变量的类型
new关键字,用于开辟空间,声明的变量存储在堆中
下面给出一个例子
关于创建一个int类型变量和数组的例子 以及如何释放他们所占据的内存
#include
using namespace std;
int main()
{
int* ptr = new int;
//动态分配一个int类型的变量
int* ptr1 = new int(5);
//动态分配一个int类型的变量 初始化为5
int* ptr2 = new int[4];
//动态分配一个数组 数组大小为4
*ptr = 10;
cout << *ptr << endl;
//注意 使用new创建变量之后 当不需要这个变量时 必须用delete释放掉开辟的这块内存 不然会发生内存泄漏
delete ptr;
delete[] ptr2;
//释放数组的内存时 要注意语法格式
return 0;
}
delete关键字 就是用来释放new开辟的空间
释放变量的内存时 可以在后面跟上变量名
delete ptr;
释放数组的内存时 要注意在delete后面跟上[]
delete[] ptr;
因为最近时间不太够 并且大部分时间都放在做题上了 对于这些细小的知识点 不做详细介绍 只是简单的介绍一下使用方法
希望对你有帮助 我们下次见~
每日一遍:
我爱编程!编程爱我! C++太牛了!
(其他的语言也很牛!)