C++ 入门3 ---- 字符串输入
【字符串输入】
先回顾一下C语言中的两种读入数据的方式 —— scanf("%s", str)和gets(str)
· scanf(("%s", str)遇到空白字符(空格、制表符、换行符)变结束输入,之后读入的数据将继续停留在缓冲区。
· gets(str) 遇到换行符后结束输入,而最后的'\n'被替换成了'\0',输入缓冲区不会继续保存换行符,因此不会对后面的输入造成影响。
下面写一段代码测试:
/*============================================================================*\ * 测试scanf("%s",str)和gets(str) * @date 3/1/2013 * 转自:http://www.cnblogs.com/jackloverose/archive/2013/02/28/2936824.html \*============================================================================*/ #include<iostream> #include<stdio.h> using namespace std; int main() { char str[80]; char ch; cout<<"1、请输入一个没有空格的字符串:"<<endl; scanf("%s",str); cout<<"用scanf(\"%s\",str)输入的字符串为:"<<str<<endl; cout<<"再输入一次作为对比:"<<endl; while((ch=getchar())!='\n'&&ch!=EOF); gets(str); cout<<"用gets(str)输入的字符串为:"<<str<<endl; cout<<"2、请输入一个有空格的字符串:"<<endl; scanf("%s",str); cout<<"用scanf(\"%s\",str)输入的字符串为:"<<str<<endl; cout<<"再输入一次作为对比:"<<endl; while((ch=getchar())!='\n'&&ch!=EOF); gets(str); cout<<"用gets(str)输入的字符串为:"<<str<<endl; return 0; }
【测试结果】
C++里面istream的两个成员函数cin.get(str,len)和cin.getline(str,len)
· cin.getline(str,len)第二个参数指定读取字符串的长度,如果这个参数是20,则函数最多读取19个字符,余下的空间自动存储'\0'.
getline()在读取指定数目的字符或遇到换行时停止读取。
· cin.get(str,len) 与getline()类似,只是它并不丢弃换行符。
为了解决这个问题可使用如下两种方式:
1、
cin.get(str,len); cin.get(); cin.get(str2,len);
2.
cin.get(str,len).get();//因为cin.get()返回cin对象 cin.get(str2,len);
下面是测试代码:
1 /*============================================================================*\ 2 * 测试cin.get()和cin.getline()
3 * @ author CocoonFan 4 * @ date 3/1/2013 5 \*============================================================================*/ 6 7 #include <iostream> 8 #include <cstring> 9 10 using namespace std; 11 12 int main() 13 { 14 const int len = 10; 15 char str[20]; 16 cout << "请输入一串字符:"; 17 cin.getline(str,len); 18 cout << "用cin.getline(str,len)得到的结果:" << str << endl << endl; 19 20 cout << "请输入一串字符:"; 21 cin.get(str,len); 22 cout << "用cin.get(str,len)得到的结果:" << str << endl << endl; 23 24 /* 25 * 再用一个get() 26 * 由于上一个get()并没有丢去换行符因此该get()独到的是空 27 */ 28 cout << "请输入一串字符:"; 29 cin.get(str,len); 30 cout << "用cin.get(str,len)得到的结果:" << str << endl; 31 32 return 0; 33 }
【测试结果】
当读取空行时:
为了解决空行问题可以使用cin.ignore(len,'\n')忽略换行 或者 cin.clear()来恢复输入