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 ,减一的原因是需要留一个“ ”代表结束。回车符代表着结束,会读取并且换成空字符保存,然后丢弃回车符。
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