C++学习笔记

1.float类型只能表示数字里面的前6位或者前7位。也就是说c++只能保证float类型的数字的前6位是正确的。如果要求的精度更高的话,请使用double和long double。

float精度是2^23,能保证6位小数内精确。double精度是2^52,能保证15位小数内精确。

但是,在通常使用中double默认打印位数没有那么多。可以使用强制输出精度的命令语句比较double和float的精度(比较方式:先输入#include <iomanip>,然后在输出语句之前插入cout << setprecision(20);。超过精度范围的小数无效,但是仍然会在屏幕上显示。

float num1 = 77777.789f;
float num2 = 77777.788f;
cout << num1 - num2 << endl;//-->0

 double num3_1 = 10000;
 double num3_2 = 3;
 double num3 = num3_1 / num3_2;
 cout << setprecision(17);
 cout << "结果是:" << num3 << endl;//-->结果是:3333.3333333333335

2.cin的时候,上衣次输入的东西如果没有使用完会直接留到下一次输入里面。 例子:空格回车或者table会把 Kaneki Ken当成两次输入,当执行到cin>>name2的时候,发现Ken的存在 直接就会把Ken赋值给name2.

    const int size = 20;
    char name1[size];
    char name2[size];
    cout << "输入name1:";
    cin >> name1;
    cout << "输入name2:";
    cin >> name2;
    cout << "name1:" << name1 << "   name2:" << name2 << endl;
    //output
    //输入name1:Kaneki ken
    //输入name2:name1 : Kaneki   name2 : ken

这个问题的解决方法是使用另外的两个方法1)cin.getline(name,size)   2)cin.get(name,size)

cin.getline(name,size)  方法会把输入的前size-1个字符赋值给name ,减一的原因是需要留一个“\0”代表结束。回车符代表着结束,会读取并且换成空字符保存,然后丢弃回车符。

cin.get(name,size)不会读取掉回车,也不会丢弃。  ps:cin.get(name,size)会把回车符一直留下,会了在输入队列除去回车,需要使用cin.get()  她会读取可以读取的下一个字符 包括回车符。

    const int size = 2;
    char name1[size];
    char name2[size];
    cout << "输入name1:";
    cin.getline(name1, size);
    cout << "输入name2:";
    cin.getline(name2, size);
    cout << "name1:" << name1 << "   name2:" << name2 << endl;
    //out put
    //输入name1:z
    //输入name2:w
    //name1 : z   name2 : w

 

posted @ 2017-08-20 21:10  Quintinz  阅读(134)  评论(0编辑  收藏  举报