C++输入字符串的几种方式
输入方式是大家都需要熟悉,如果查找输入的问题建议直接看注意事项,getline第一行读取失败的情况分析。
如果想要了解ACM模式下输入的绝大多数情况下,请参考连接:解决常见情况下C++终端输入问题
读取输入方式
- cin<<
- cin.getline(str, size, dilem) // 属于istream流
- cin.get()
- getline(cin, str) // 属于stream流
- gets() // 谨慎使用
- getchar()
1. cin>>
- 输入一个数字或字符,遇“空格”、“TAB”、“回车”就结束
int a;
char c;
cin >> a;
cin >> c;
cout << a << " " << c << endl;
输入:3 c
输出:3 c
- 接收一个字符串,遇“空格”、“TAB”、“回车”就结束
string s;
cin >> s;
cout << s << endl;
输入:asd dfs //遇空格结束
输出:asd
- 扩展,多行输入
string a, b, c;
cout << "input a:";
cin >> a;
cin.ignore(1024, '\n');
cout << "input b:";
cin >> b;
cin.ignore(1024, '\n');
cout << "input c:";
cin >> c;
cout << "string a = " << a << endl
<< "string b = " << b << endl
<< "string c = " << c << endl;
2. cin.getline()
用法:
-
接收一个字符串,可以接收空格并输出
-
cin.getline(字符指针(char*),字符个数N(int),结束符(char))
-
当第三个参数省略时,系统默认换行符’\n’,或者为‘\0’,结束
char ch[10];
cin.getline(ch, 5);
string s = ch;
const char* s_to_c = s.c_str();
cout << ch << endl;
cout << s_to_c << endl;
输入:saddsfs
输出:sadd
注意事项:
- 注意这里不能使用string类型 ,如果是string转char*需用c_str(),如ch = str.c_str();
- 接收5个字符到ch中,其中最后一个为’\0’,也占一个字符大小,所以只看到4个字符输出;
3. cin.get()
- cin.get(ch),获取字符
- cin.get(ch,len),获取一行字符串,包括空格,也包括‘\0’
- cin.get(),没有参数主要用来舍弃输入流中不需要的字符,或者舍弃回车,用来弥补cin.get(ch,len)的不足
char ch;
ch = cin.get(ch); // 或者
ch = cin.get();
4. getline()
用法:
- 接收一个字符串,可以接收空格并输出,需包含
#include<string>
- getline(cin,str,结束符(char))
- 当第三个参数省略时,系统默认换行符’\n’,或者为‘\0’,结束
string s;
getline(cin, s);
cout << s << endl;
输入:das das fdsa
输出:das das fdsa
cin 和 getline注意事项
-
cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
-
当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
ch = cin.get();
亦或者cin.ignore();
的方式将回车符清除.如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过。这是因为cin会把
‘\n’
留在字符流缓存区中,而getline()读取‘\n’
就结束,以此跳过第一个getline()。 -
cin>>与getline的工作方式,流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回
5. gets()
用法:接受一个字符串,可以接收空格并输出,需包含“#include“
,具体用法与getline类似,注意gets()不检查字符串string的大小,因此容易造成缓存溢出的安全问题,重要场合尽量不要使用。
6.getchar()
用法:获取一个字符
char ch;
ch = getchar();
cout << ch << endl;
结果就不多说了