c++ 关于cin流问题?
本文介绍了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屋!
查看全文