【字符串输入】
先回顾一下C语言中的两种读入数据的方式 —— scanf("%s", str)和gets(str)
· scanf(("%s", str)遇到空白字符(空格、制表符、换行符)变结束输入,之后读入的数据将继续停留在缓冲区。
· gets(str) 遇到换行符后结束输入,而最后的'n'被替换成了' ',输入缓冲区不会继续保存换行符,因此不会对后面的输入造成影响。
下面写一段代码测试:
/*============================================================================*
* 测试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个字符,余下的空间自动存储' '.
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()来恢复输入
原文链接: https://www.cnblogs.com/CocoonFan/archive/2013/03/01/2938545.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/79190
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!