原文:https://blog.csdn.net/Li_haiyu/article/details/88767379
一、cin,可以接受数字和字符串的输入,遇空格,Tab和回车结束
二、cin.get()
用法1:用来接受一个字符,cin.get(字符变量) 与 字符变量 = cin.get() 结果一样 例子如下:
#include<iostream>
#include<string>
using namespace std;
int main() {
char next;
//next = cin.get();
cin.get(next);//cin.get(next)与next = cin.get()一个意思,查看cin.get()内置函数可以发现返回的this指针
cout << next << endl;
while (1);
}
用法2:cin.get(字符数组名,字符数组长度),用于接受固定长度的字符串,包括空格
#include<iostream>
#include<string>
using namespace std;
int main() {
char next[10];
cin.get(next,10);
cout << next << endl;
while (1);
}
输入:abcdefghij(10个字符长度)
因为字符数组后面有一个‘\0’结束符,所以只能存放9个元素。
这里顺便记录一下计算字符数组长度的两个常用方法:
sizeof(数组名)/sizeof(数组类型)和strlen(数组名)
1、sizeof() 如果数组长度在中括号【】 中给定,那么sizeof()方法求得就是中括号【】的大小;如果数组长度没有在【】中指定,那么sizeof()计算数组长度的结果就是包括结束符‘\0’的长度。
2、strlen()求字符长度求的结果就是不包括‘\0’的长度
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char str1[10] = "China";
char str2[] = "China";
int sizeof_len_str1 = sizeof(str1) / sizeof(char);
int sizeof_len_str2 = sizeof(str2) / sizeof(char);
cout << sizeof_len_str1 << endl;//10 [10]确定大小,sizeof求的结果和[]一样
cout << strlen(str1) << endl;//5 strlen()只计算实际字符个数,不包括结束符'\0'
cout << sizeof_len_str2 << endl;//6 []没有指定大小,sizeof求的结果包括结束符'\0'
cout << strlen(str2) << endl;//5 strlen()只计算实际字符个数,不包括结束符'\0'
while (1);
}
三、 cin.getline() 接受一行字符,三个参数,第一个参数是数组名,第二个参数是接受的长度,第三个是默认参数'\0'表示输入的结束符。
#include<iostream>
using namespace std;
int main() {
char ch[5];
cin.getline(ch,5);//abcdefg
cout << ch << endl;//abcd
while (1);
}
设置‘c’为结束符
#include<iostream>
using namespace std;
int main() {
char ch[5];
cin.getline(ch,5,'c');//abcdefg
cout << ch << endl;//ab
while (1);
}
四、输入格式特殊情况,输入用逗号隔开的数组如1,2,3,4,5,更有丧心病狂输入情况如数组形式A={1,2,3,4}
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
string s;
getline(cin, s);
vector<int> arr;
char* temp;
char* p = const_cast<char*>(s.c_str());//c_str()返回的const char*类型
temp = strtok(p, ",{ }A=");
while (temp!=nullptr)
{
arr.push_back(atoi(temp));
temp = strtok(NULL, ",{ }A=");
}
for (int i = 0; i < arr.size(); ++i)
cout << arr[i] << endl;
system("pause");
return 0;
}
string类中的c_str()函数返回的类型是const char* 类型,用const_cast可以将const和非const转换。
strtok()函数的原型为
_Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s)
_ACRTIMP char* __cdecl strtok(
_Inout_opt_z_ char* _String,
_In_z_ char const* _Delimiter
);
功能是以特定字符为分割点,将原字符分解字符串为一组字符串。_String为要分解的字符串,_Delimiter为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。使用strtok函数一般结合while语句使用。
输入为1,2,3,4
输出1 2 3 4
输入A={1,2,3,4}
五、保留x位小数输出(setprecision(n)的一些用法总结)
参考:https://blog.csdn.net/qq_36667170/article/details/79265224
setprecision(n)功能:控制浮点数显示的有效数字个数。
要保留几位小数setprecision(n)的括号里n就换成几。写一次就行了,对之后的数字都有效。
setprecision(n)和fixed合用的话可以控制小数点后有几位。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a = 12.34;
double b = 56.789;
double c = 12345.6789;
double d = 1.0;
cout << setprecision(2) << a << endl;//12
cout << b << endl;//56
cout << c << endl;//1.2e+04
cout << d << endl;//1
cout << fixed << d << endl;//1.00
system("pause");
return 0;
}