c++一个简单而又奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 11:36:38
#include<conio.h>
#include<iostream>

using namespace std;
int main()
{
double db;
while(cin>>db)
{cout<<db<<endl;}

cout<<"end"<<endl;
int i;
cout<<"read"<<endl;
cin>>i;
cout<<i;
getch();
return 0;
}
这个程序如果一开始输入一个字母,那么会跳出一串奇怪的数字,然后按什么都会自动关掉运行窗口,这是为什么?还有一个问题,循环结束的条件是while(cin>>db),也就是说cin对象遇到了某种错误,理论上应该用cin.clear()啊,为什么一般这样的程序通常都不用加cin.clear()?????跪求高手给我答案

不是崩溃了,而是你输入的那个字符仍然在流里面,这时你再cin>>i,又把那个字符当成整型读入,必然会出错。
你在while跳出来之后,加入cin.clear();cin.ignore();就好了
ignore是忽略掉输入的一个字符

在这两行代码中加上:cin.clear();string st;cin>>st;即可;
cout<<"end"<<endl;
int i;
但是还有加上头文件include<string>;
原因:string类型可以接受任何其它类型的形式,你原来不可以输入是,输入流状态为否,需要cin.clear();但是你下次都的时候还是会原来的那个数,所以你需要将原来的数的形式换成string类型。建议好好阅读c++的输入流输出流这章。

楼上的,输入字母是为了跳出循环,就是要不匹配才能跳出循环,不过这个方法真的很不好...
我只研究出一个问题...就是在定义每一个变量的时候,最好能够赋初值...但是为什么不会执行 cin>>i ?困惑啊...
如果像 chunqing286 说的,字符仍然在流里面,那么我把int i;改成char i = 'a';后为什么我在第一个位置输入'f',为什么输出的i依然是a呢?

double 的db为什么输入字母,不匹配亚.

cin.clean()是清除缓存,如果程序设计合理,一般是用不着的.