zoukankan      html  css  js  c++  java
  • 日常笔记4关于cin、cin.get()、cin.getline()、getline()使用区别

    1.关于PAT中段错误

    使用字符数组出现错误:
    char str[256];
    报错段错误,然后改用C++中的string
    改成:
    string str;
    同char数组一样,也可以使用下标来取单个字符
    但是还有区别就是,判断字符长度
    char str[256],使用int len = strlen(str);
    string str,使用int len = str.length();

    2.关于输入cin、cin.get()、cin.getline()、getline()使用

    前言

    在做PATB1033 旧键盘打字(20分)时,有一个答案错误一直没有解决
    只拿了19分,百思不得其解
    然后我把cin >> str;换成getline(cin, str);问题解决
    cin.getline()和getline()是两回事。
    cin.getline()是在#include
    而getline(cin,str)用法:接收一个字符串,可以接收空格并输出,需包含“#include

    1. cin

    结束条件:[enter],[space],[tab]
    处理方法:cin遇到缓冲区中的[enter],[space],[tab]会结束当前输入,
    并舍弃[enter],[space],[tab],继续下一项输入,
    当有连续[space],[enter,[tab]会全部舍弃。

    2. cin.get()

    用法1: a = cin.get()或者cin.get(a)
    结束条件:输入字符足够后,回车,意思是只有当满足输入条件后的字符数,
    然后回车才会结束。[enter],[space],[tab]不会被舍弃。
    说明:这个是单字符的输入,用途是输入一个字符,把它的ASCALL码存入到a中

    用法2:cin.get(arrayname,size) 把字符输入到arrayname中,长度不超过size
    注释:arrayname必须是char[]类型,即char数组类型,不可以为string类型;size是指输入长度,即允许输入的最大长度。
    处理方法:假设把数据输入到 char a[arraylength],数组长度为arraylength。cin.get(a,size)---size,arraylength不同可以分为四类:

    用法3:用法:cin.get(arrayname,size,s) 把数据输入到arrayname字符数组中,当到达长度size时结束或者遇到字符s时结束
    注释:a必须是字符数组,即char a[]l类型,不可为string类型;size为最大的输入长度;s为控制,遇到s则当前输入结束缓存区里的s将被舍弃

    #include<iostream>
    using namespace std;
    int main(){
    	int i;
    	char a[10];
    	cin.get(a,10,'.');
    	cout<<a;
    }
    

    3. cin.getline()

    cin.getline()的用法和cin.get()用法大致相同,没有一参数用法,只有二参数,三参数两类
    cin.gerline(arrayname,size)
    cin.getline(arrayname,size,s)用法与cin.get()效果大致相同,但也有些区别
    (1)cin.getline(arrayname,size)与cin.get(arrayname,size)的区别
    cin.get(arrayname,size)当遇到[enter]时会结束目前输入,他不会删除缓冲区中的[enter]
    cin.getline(arrayname,size)当遇到[enter]时会结束当前输入,但是会删除缓冲区中的[enter]

    4. getline(cin,str)

    用法:接收一个字符串,可以接收空格并输出,需包含“#include

    #include<iostream>
    #include<string>
    using namespace std;
    main (){
    string str;
    getline(cin,str);
    cout<<str<<endl;
    }
    

    5. 注意的问题

    1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
    2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
    str=" ";
    getline(cin,str);
    的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    《C和指针》读书笔记——第一章 快速上手
    《C和指针》读书笔记——第三章 数据
    Linux下简易蜂鸣器驱动代码及测试实例
    Linux下GPIO驱动(五) misc_register();
    Linux下实现流水灯等功能的LED驱动代码及测试实例
    Linux下GPIO驱动(四) gpio_request();gpio_free();
    支持阻塞操作和轮询操作的globalfifo设备驱动代码分析以及测试代码
    基于等待队列及poll机制的按键驱动代码分析和测试代码
    Linux下GPIO驱动(一) 一个简单的LED驱动
    虚拟内存设备驱动memdev及实例代码
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11781506.html
Copyright © 2011-2022 走看看