copy(istream_iterator(cin),istream_iterator(),back_inserter(Digs))后无法输入整数!

fangrk 2003-03-22 02:06:23
vector<int> Digs;
cout<<"Input some ints.Input a character to end input."<<endl;
copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(Digs));
cout<<"Option:\n1.Less\n2.Great\nYour choice(1/2):";
int Option;
cin>>Option;//失败!

输入一系列的整数,遇到字符则结束,把这些整数存放到一个vector中。
应该如何操作才能输入Option?
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangrk 2003-03-22
  • 打赏
  • 举报
回复
解决了,先clear后ignore

vector<int> Digs;
cout<<"Input some ints.Input a character to end input."<<endl;
copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(Digs));
cout<<"You entered "<<Digs.size()<<" numbers:"<<endl;
copy(Digs.begin(),Digs.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cin.clear();
cin.ignore();
cout<<"Compare options:\n1.Less\n2.Greater\nYour choice(1/2):";
int Option;
cin>>Option;
chaisave 2003-03-22
  • 打赏
  • 举报
回复
我是在GNU/Linux上,你用的什么?试一下DevCpp带的gcc3.2如何?
$gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/3.2.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.2.3 20030316 (Debian prerelease)

下面是我改的代码片断:
vector<int> v;
cout<<"Input some ints.Input a character to end input."<<endl;
copy(istream_iterator<int>(cin),
istream_iterator<int>(),
back_inserter(v));
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
cin.clear();
cout << (long)cin.rdstate() << endl;
cout<<"\nOption:\n1.Less\n2.Great\nYour choice(1/2):";
int opt;
cin>> opt;
cout << "you choosed " << opt << endl;

输入
1 2 3
^D
显示
1 2 3 6
0

Option:
1.Less
2.Great
Your choice(1/2):输入1
you choosed 1

fangrk 2003-03-22
  • 打赏
  • 举报
回复
一样的表达方式,在Win98上面可以用Ctrl+Z表示输入结束,但是到了Win2000,Ctrl+Z就没有用了(中断了整个程序)。无论是Ctrl+Z还是输入一个非数字,都无法进行下面的输入。我在下面试过cin.clear(),但是看来不起作用。
chaisave 2003-03-22
  • 打赏
  • 举报
回复
首先,恐怕不能以"character"结束输入乐,
在Unices上得在输完数字后,得另起一行(打个回车),
再输个Ctrl-d,在Win32上对应的大概是Ctrl-Z吧(要试试)。
其次,在添好Digs后,cin的statebit会被置为(eofbit | failbit),
后面的操作就会乱套了,要cin.clear()一下。
不过,我觉得以非数字结束输入是没问题的,不知道为什么不行,非要EOT不可。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧