zoukankan      html  css  js  c++  java
  • 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()来恢复输入

  • 相关阅读:
    C#单例模式的三种写法转载
    silverlight 添加配置项
    oracle 如何实现上一条、下一条、查找不连续的值
    一个IT民工眼中的保障房不能保证公平,赞成取消保障房
    c# where 转载
    进度条 silverlight
    中国软件公司我深表认同:软硬结合
    计算经纬度两点之间的距离(c#)
    如何高效使用SQLITE .NET (C#)
    如何判断系统是否安装了flash插件
  • 原文地址:https://www.cnblogs.com/CocoonFan/p/2938545.html
Copyright © 2011-2022 走看看