一直以来对C++的字符串输入部分都模棱两可,这次对这三种输入方式总结了一下,如有错误之处,还请大家指正。
1. 结束标记
1)cin使用空白(空格、制表符和换行符)来确定字符串的结束位置
2)cin.get(char[], int)使用换行符来确定字符串的结束位置
3)cin.getline(char[], int)使用换行符来确定字符串的结束位置
2. 结束符的保留情况
1)cin将结束的标记保留在输入队列中
2)cin.get(char[], int)将结束的标记保留在输入队列中
3)cin.getline(char[], int)将结束的标记从队列中删除
【注意】
1. cin >> 会过滤掉不可见字符如空格、制表符和换行符等
2. cin.get(char ch)可以读取任何字符包括空格、制表符和换行符,并把该字符赋值给ch
3. cin.get()用来读取一个字符,该字符可以是包括空格、制表符和换行符的任何字符
3. cin.get()使用举例说明
源代码如下所示:
#include <iostream> #include <stdio.h> using namespace std; int main() { const int size = 50; char firstCity[size]; char secondCity[size]; cout << "Please Input First City!\n"; cin.get(firstCity, size); printf("Please Input Second City!\n"); cin.get(secondCity, size); printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity); }
解决方案:cin.get()函数不带任何参数可以读取下一个字符(即使是换行符),修改后程序源代码如下:
#include <iostream> #include <stdio.h> using namespace std; int main() { const int size = 50; char firstCity[size]; char secondCity[size]; cout << "Please Input First City!\n"; cin.get(firstCity, size).get(); printf("Please Input Second City!\n"); cin.get(secondCity, size); printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity); }
4. cin.getline()使用举例说明
程序源代码如下:
#include <iostream> #include <stdio.h> using namespace std; int main() { const int size = 50; char firstCity[size]; char secondCity[size]; cout << "Please Input First City!\n"; cin.getline(firstCity, size); printf("Please Input Second City!\n"); cin.getline(secondCity, size); printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity); }
5. cin使用举例说明
程序源代码如下:
#include <iostream> #include <stdio.h> using namespace std; int main() { const int size = 50; char firstCity[size]; char secondCity[size]; cout << "Please Input First City!\n"; cin >> firstCity; printf("Please Input Second City!\n"); cin >> secondCity; printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity); }程序运行结果如下,这时你会疑问,cin不是会保留结束符么,为什么还是可以继续输入第二个字符串?这是因为 >> 会过滤掉不可见字符如空格、制表符和换行符等
可以再看个例子,就可以说明cin的确会保留结束符在输入队列中,同时证明>> 会过滤掉不可见字符如空格、制表符和换行符
程序源代码如下:
#include <iostream> #include <stdio.h> using namespace std; int main() { const int size = 50; char firstCity[size]; char secondCity[size]; cout << "Please Input First City!\n"; cin >> firstCity; printf("Please Input Second City!\n"); cin.getline(secondCity, size); printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity); }运行结果如下所示,此结果说明cin的确会保留结束符在输入队列中,程序第二次输入的时候由于检查到了输入队列中的换行符,认为已经输入过。