用 cin 输入数据是为什么不够强壮????

metero 2003-01-07 01:41:27
#include <iostream>
#include <conio.h>
void main()
{
int i;
for(;;)
{

cin >> i ;
cout << i << endl;
}
getch();
}

为什么不能输入第二个数据?
为什么在输入字符时不能退出?
...全文
52 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoshuaLi 2003-03-03
  • 打赏
  • 举报
回复
该问题已经结贴

// cin 面向(又是这个单词)单词,用cin.getline()
ao 2003-01-19
  • 打赏
  • 举报
回复
问题都解决了,怎么还不结贴啊??
softworm163 2003-01-16
  • 打赏
  • 举报
回复
这个问题我在C++ PRIMER PLUS里看过,
它还深入不少东东,

可惜半月没看了,忘了
ao 2003-01-16
  • 打赏
  • 举报
回复
同意菜鸟叽叽!
Firstbyte 2003-01-16
  • 打赏
  • 举报
回复
这个问题......
SwordMan2001 2003-01-16
  • 打赏
  • 举报
回复
要健壮,就要以复杂来换取,试试把cin>>i那一句改为
while(! (cin>>i)){
cin.seekg(0, ios::beg);
cin.clear();
cout<<"Input error, please input again:";
}
sea_lover 2003-01-15
  • 打赏
  • 举报
回复
你的错误前面的兄弟说的已经很清楚了,不再说了!
for(;1;)这样一定行!





-------------------------------------------
【◇SeaLover◆〗
/ \
★---CSDN---☆
 \ /
【○Trust Me●〗
thememory 2003-01-15
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;
int main()
{
int i;
while(1)
{
cin >> i;
if(!cin)break;
cout << i << endl;
}
return 0;
}
try this
rushman 2003-01-15
  • 打赏
  • 举报
回复
可以这样
cin.clear();//一般这样做比较可靠。
cin.ignore(n,'\n');/忽略n个字符,直到'\n',当然也可以不是'\n'
metero 2003-01-15
  • 打赏
  • 举报
回复
谢谢rushman(一线天)。

我始终想找出方法来避免这个问题。
alan118 2003-01-09
  • 打赏
  • 举报
回复
studying
danceflash 2003-01-09
  • 打赏
  • 举报
回复
To: metero(天不赋我唯有勤)

用"scanf()"实现的输入模块:


#include <stdio.h>

void main()
{
int i; //待输入整数
int in; //scanf()函数返回值记录

/***************** Begin ************************/
do{
in = scanf( "%d", &i ); //scanf()函数读入失败时返回0
if( in == 0 ) //若返回值为0,表示读入失败
getchar(); //读入失败则用getchar()函数清除缓冲区(每次只能清除一个字符)
}while( in == 0 ); //读入失败就循环读入
/***************** End ***********************/

printf( "i = %d\n", i );
}

不好意思,模块有点儿长,又懒得优化了,嘿嘿~~~
danceflash 2003-01-09
  • 打赏
  • 举报
回复
To: metero(天不赋我唯有勤)

昨天晚上没来,关于cin的用法我没有研究过,这两天也没有时间了
只能给你一个"scanf()"的输入模块,保证可以使用,使我以前编程的时候用的,你拿去试试看^_^
luixui 2003-01-09
  • 打赏
  • 举报
回复
郁闷
metero 2003-01-09
  • 打赏
  • 举报
回复
怎么样做呢?
你的程序是在什么环境下运行通过的?
metero 2003-01-09
  • 打赏
  • 举报
回复
非常感谢chinajiji(菜鸟叽叽) !
但问题还是一样。
如果我输入一个字符,比如说"A",然后,它就不断地输出cout << "wrong input format! input again:" << endl;
我在BC3.1下运行的。
rushman 2003-01-09
  • 打赏
  • 举报
回复
所以说实践出真知 :)
metero 2003-01-09
  • 打赏
  • 举报
回复
这个在书上可没有说。
metero 2003-01-09
  • 打赏
  • 举报
回复
如果这样的话,倒不如用scanf 了。
rushman 2003-01-09
  • 打赏
  • 举报
回复
首先,用fflush来清除cin/cout的缓冲区是不可取的。因为无法确定cin/cout是否是通过stdin/stdout文件句柄来进行操作的。

对于你的问题,可以肯定是因为输入缓冲区的问题。输入的回车'\n'始终不会被读出。可以这样
char c;
cin.clear();
do{
cin.get(c);
while(c > '\n');
即可。

但是还是建议你不要用cin来输入数字(整数/浮点都会有问题),你可以先读取一整行,在从其中得到需要的数据:
char buf[MAX_LINE];
int i;
cin.get(buf,sizeof(buf) - 1,'\n');//也可以用其他字符表示输入结束
//另外,用fgets也可以,不过回车'\n'它不会帮你删掉。
sscanf(buf,"%d",&i);//用istrstream也可以,方法很多,都不会有什么问题
加载更多回复(17)

69,382

社区成员

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

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