C++ 入门3 —- 字符串输入

【字符串输入】

先回顾一下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++ 入门3 ---- 字符串输入

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 }

【测试结果】

C++ 入门3 ---- 字符串输入

当读取空行时:

C++ 入门3 ---- 字符串输入

为了解决空行问题可以使用cin.ignore(len,'n')忽略换行 或者 cin.clear()来恢复输入

原文链接: https://www.cnblogs.com/CocoonFan/archive/2013/03/01/2938545.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/79190

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:55
下一篇 2023年2月9日 下午6:56

相关推荐