C++ 中字符输入(cin,getline,cin.get)

问题背景:

#include "stdafx.h"
#include
#include
using namespace std;
int main()
{
    string str;
    while(getline(cin,str))
    {
        char s,s2;
        cin >> s;
        int count = 0;
        for(int i=0;iif(s>='A'&& s<='Z')
                s2=s+32;
            else s2=s-32;
            if(s == str[i])
                count++;
            else if(s2==str[i])
                count++;
        }
        cout << count<//在输入一个字符后有一个回车符在缓存中,需要忽略后面的输入
        cin.ignore();//循环的时候会出问题,第二次循环读不出s,后面加上一个cin.ignore()就好了
    }
}        

在VS2010中调试发现,在 getline(cin,str) 后面有cin>> 时候,敲入enter,下一次循环,str的ANCS为10

符号 ASCII码 意义
\n 10 换行NL
\r 13 回车CR
总结:
1、getline 遇到换行符就停止读取,并忽略换行符。但getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。
2、cin.get()会把回车(‘\n’)当作字符读入.而cin>>则会跳过回车或空格
3、调试发现VS2010中Enter为\n

用法1: cin.get(字符变量名)可以用来接收字符
ch=cin.get();或者cin.get(ch);
**用法2:**cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
char a[20];
cin.get(a,20);
**用法3:**cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.

cin.getline()  // 接受一个字符串,可以接收空格并输出
char m[20];
cin.getline(m,5);
cout<

输入:jkljkljkl
输出:jklj
接受5个字符到m中,其中最后一个为’\0’,所以只看到4个字符输出;
延伸:
cin.getline()实际上有三个参数,cin.getline(接受字符串的参数m,接受个数5,结束字符)
当第三个参数省略时,系统默认为’\0’
如果将例子中cin.getline()改为cin.getline(m,5,’a’);当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk

参考:
http://blog.csdn.net/dcj0913/article/details/39058555
http://blog.sina.com.cn/s/blog_868a5fbd0100vz8f.html

你可能感兴趣的:(学习总结)