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()来恢复输入

 

 

posted @ 2013-03-01 13:31  Cocoon  阅读(388)  评论(0编辑  收藏  举报