c++ 关于cin流问题?

查看:121
本文介绍了c++ 关于cin流问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

为什么多了几行cin.get(ch)显示的字符却变少了呢?
还有ch是char形式
但是能连续输出字符,是不是给他一次输入多个字符存在cin流中,当进入while循环再遇到cin流直接忽视再循环逐一输出字符,直到cin流空了后才开始使用while内的cin流?

#include <iostream>
using namespace std;
int main()
{
    char ch;
    int count=0;
    cin.get(ch);
    while(cin)
    {
        cout<<ch;
        ++count;
        cin.get(ch);
    }

    cout<<endl<<count<<endl;

    return 0;
}

#include <iostream>
using namespace std;
int main()
{
    char ch;
    int count=0;
    cin.get(ch);
    cin.get(ch);
    cin.get(ch);
    while(cin)
    {
        cout<<ch;
        ++count;
        cin.get(ch);
    }

    cout<<endl<<count<<endl;

    return 0;
}

解决方案

首先你这个程序最后一句是很好的,它输出了整个循环的次数,但是看你的执行结果你没有把它显示出来,按下ctrl+d(文件尾)可以结束这个循环;

cout<<endl<<count<<endl;

对于输入,系统是有自己的输入缓冲区的,你要求的是一个一个字符读入,输入的时候提供了一串字符,系统会自动保存到输入缓冲区等待读取。
cin.get(ch);执行一次会从缓冲区中拿出一个字符(从缓冲区中抹去这个字符)
第二个程序中以你的输入lin为例,第一条cin.get(ch)拿到‘l’,第二条拿到‘i’,第三条拿到‘n’,这时候才进入循环,开始打印,所以才只输出了‘n’。
这个时候如果你去打印count的值,你会发现是2,也许你会感到奇怪,明明就只读取了一个字符‘n’,为什么会进行两次循环呢?因为在你输入完lin之后你按下了回车‘n’,cin.get(ch)会读取到这个字符,所以进行了二次循环。
对于缓冲区理解不够的程序员在码代码的时候往往会因为这个‘n’而感到苦恼
PS:也许你是想通过这个程序来熟练缓冲区,但如果这是你平时的编程习惯,那需要改善。给个例子

#include <iostream>
using namespace std;

int main()
{
    int data;
    while(cin>>data)
    {
        cout << data << endl;
    }

    return 0;
}

这篇关于c++ 关于cin流问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆