社区
C++ 语言
帖子详情
cin>>str;怎么判断cin中是否还有字符?
bbq1980
2004-09-08 02:01:43
在使用cin和std::string做标准输入时,我怎么知道cin中还有没有字符?
...全文
428
21
打赏
收藏
cin>>str;怎么判断cin中是否还有字符?
在使用cin和std::string做标准输入时,我怎么知道cin中还有没有字符?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
daylove
2004-09-09
打赏
举报
回复
while( cin )
{
}
------------------------------------------------------《爱晶如梦》
『唯我独坐寒江』
『难为春城美景』
『秋黛依影随行』
『紫晶轻舞我心』
bbq1980
2004-09-09
打赏
举报
回复
目的是达到了,但不知有没有问题,实例代码如下我自己觉得写法上不是很准确:
cin>>str; // 取得输入的最前面的数据
/////////////////////////////////
string str_var;
if ( 10 != cin.get() ) // 判断是否是以回车结束
{
const int meta = cin.peek();
if ((10!=meta) && (32!=meta)) // 如果不是以一些空格结束
{
cin>>str_var;
}
}
/////////////////////////////////
bbq1980
2004-09-09
打赏
举报
回复
虽然问题最后是我自己解决了但是还是要感谢一下大家
bbq1980
2004-09-09
打赏
举报
回复
上面的代码在Windows XP sp1 VS.NET 2003上没什么问题
bbq1980
2004-09-09
打赏
举报
回复
string str_var;
cin>>str_var;
/////////////////////////////////
int meta = 0;
// 取出最后一个字符,不等于回车
while (10 != (meta=cin.peek()))
{
if (32 == meta) // 空格
{
cin.get(); // 弹出最后一个字符
}
else
{
cin>>str_var;
cout<<str_var;
}
}
/////////////////////////////////
whyglinux
2004-09-08
打赏
举报
回复
>> 你说的不对,你那样会blocking住
呵呵,原来问题在这里:你还不知道“结束”输入的方法。
其实上面 plainsong(短歌) 已经对这个问题进行了分析,对于 cin 是键盘输入的情况,只有靠用户输入一个约定的结束符来通知 cin 数据输入到此结束。这个产生这个结束符的按键就是:
在Windows中,Ctrl+Z
在Linuz中,Ctrl+D
一般来说,输入数据结束之后,按 Ctrl+Z 或者 Ctrl+D 然后再按回车键就会退出上面的 while 循环。
bbq1980
2004-09-08
打赏
举报
回复
TO: whyglinux(山青水秀)
你说的不对,你那样会blocking住
whyglinux
2004-09-08
打赏
举报
回复
>> 其实我的目的就是怎样判断cin中有没有数据,如果有数据我在调用cin>>string;取得数据
这样实现:
while (cin>>string) { /* ... */ }
xjp6688
2004-09-08
打赏
举报
回复
cin.eof()
短歌如风
2004-09-08
打赏
举报
回复
“判断cin中有没有数据”在cin是控制台本身是一个不成立的概念,当我们从控制台输入数据时,控制台会把它们放入到行缓冲中,直到遇到回车,这时你的程序就去接收数据,当把这一行数据都读完时如果程序还要求输入,则控制台再次接管程序,以便于用户输入。如果你要判断这一行是否还有数据,用getline就可以了;如果你要判断用户是否还会继续输入,那么你必须允许用户使用一个特殊输入来表示“我已经输入完了,不再输入了”,否则的话除了正在输入的用户自己就只有上帝知道如何判断了——如果上帝是程序员的话。
此外,用文件结束进行判断是很常用的一种手段,所有的“过滤器”程序都是这样作的,因为它们需要对“所有输入”进行处理,所有输入就是对于文件中的全部内容。而在M$系统中表示控制台输入的文件结束方式就是<ctrl>-Z。
bbq1980
2004-09-08
打赏
举报
回复
TO: plainsong(短歌)
<ctrl>-Z实际上是出错了,而且在命令行的输入中这样也不太现实
其实我的目的就是怎样判断cin中有没有数据,如果有数据我在调用cin>>string;取得数据
bbq1980
2004-09-08
打赏
举报
回复
to: waini11(王子)
你这个是出错了
short int i;
if(!(cin>>i) )
{
cout<<"error"<<endl;
cin.clear();
}
cout<<i<<endl;
pacman2000
2004-09-08
打赏
举报
回复
cin.eof()看是不是true
注意,换行符也算是输入的!!!
sunlu_eric
2004-09-08
打赏
举报
回复
关于缓冲的问题还是用字符比较合适
char a,b;
cin>>a;
cin>>b;
你看,他并不把回车直接放到b中,
着就是,cin比scanf的好处的一部分吧,
不都说要尽量用cin吗????
当然是说C++了,哈哈哈。。。。。
sunlu_eric
2004-09-08
打赏
举报
回复
应该不会出现这样的问题吧,
我试了一下,没有呀!!!
waini11
2004-09-08
打赏
举报
回复
应该是无法判断的 比如
short int i;
cin>>i;
你可以输入999999999999999999999 他照样可以通过
短歌如风
2004-09-08
打赏
举报
回复
std::string str;
std::vector<std::string> strs;
while(std::getline(std::cin, str))
strs.push_back(str);
当cin是文件时读到文件尾,当cin是控制台时读到<ctrl>-Z字符。这是唯一标志cin文件结尾的方法。
不过,在每次执行完getline时,cin中其实都已经没有字符了,下一次调用是新输入的。因为cin是以行为单位输入的。
bbq1980
2004-09-08
打赏
举报
回复
晕~~不至于我都结不了帖吧,寒啊。。。
bbq1980
2004-09-08
打赏
举报
回复
兄弟们帮帮忙啊
bbq1980
2004-09-08
打赏
举报
回复
你弄错了,我说的是cin中,不是string中
加载更多回复(1)
浅谈c++
中
的while(
cin
)问题
xp系统
中
利用dev-cpp进行编程,语句while(
cin
>>str),str是个string类型,在一行
中
输入几个string,末位加个ctrl+z,输入没有结束,除非出入换行后,再输入ctrl+z才能跳出输入。一直不明白未什么,解释请看下。 输入...
C++
中
<iostream> 的
cin
>> str 和<string>的getline(
cin
, str) 用来读取用户输入的两种不同方式的不同点
C++
中
的
cin
>> str和的getline(
cin
, str) 用来读取用户输入的两种不同方式的不同点介绍
cin
>>str和getline(
cin
,str)的区别
cin
>>str:遇到空格将停止输入 getline():获得完整一行
字符
串
c++
中
cin
>>str+1什么意思
cin
>> a + 1; 那么这个
cin
>>a+1是什么意思呢,查了一下资料,发现Stack Overflow上一位老哥解释得比较清楚 什么意思呢,也就是说这是一个指针运算,a表示的是指针char*,由于>>操作优先级低于+...
【operator bool】while(
cin
>> str)是什么意思?
一、前言 在oj题
中
,为了实现多行输入,我们经常可以看到这样的写法:while(
cin
>> str),这究竟是什么意思呢?为了理解其
中
的含义,我们首先需要对C++基础IO和运算符重载具有初步的认识。 二、
cin
是什么? ...
C++ 语言
64,685
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章