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;
}
  1. 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]

  2. getline(cin,str)
    用法:接收一个字符串,可以接收空格并输出,需包含“#include”
#include<iostream>
#include<string>
using namespace std;
main (){
string str;
getline(cin,str);
cout<<str<<endl;
}
  1. 注意的问题
    1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
    2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
    str="\n";
    getline(cin,str);
    的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
01-02 01:47