初学者恳请能手解决 有关问题虽小,但常常困扰

菜鸟恳请能手解决 问题虽小,但常常困扰
比如下面简单的“猜岁”范例程序,按程序本应输入浮点数或整数,这样就能正常运行下去。但如果不小心(或特意)输入了含字母的字符串(如输入9k),就进入死循环,须关闭程序。请高手修改下面程序,达到输入字母字符串时,无须关闭程序,还能继续输入且正常运行下去:


    #include <iostream.h>
    #include <stdio.h>
void   main()
        {
        const   float   sui=25.5;
        float   cai;
        in:   cout < < "请从键盘输入你猜的岁数: ";   cin> > cai;
                while(cai <0)
                {
        cout < < "时光能倒流吗?   请重新输入你猜的岁数: ";   cin> > cai;
                }
                if(cai==sui)
        cout < < "     对!岁数是 " < <midi < <endl
                < <endl;
                if(cai> sui)
                {
        cout < < "过大了。 " < <endl
                < <endl;
        goto   in;
                }
                if(cai <sui&&cai> =0)
                {
        cout < < "小了。 " < <endl
                < <endl;
        goto   in;
                }
        }



------解决方案--------------------
对输入进行校验就可以了 ~
------解决方案--------------------
供参考一个:

#include <string>
#include <sstream>
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

int main ()
{
const float sui=25.5;
float cai;
cout < < "请从键盘输入你猜的岁数: ";

in: string tmp;
getline(cin, tmp);
while(tmp.find_first_not_of( ".0123456789 ") != string::npos)
{
cout < < "你输入的数据有误,请确认,并重新输入! " < <endl;
cout < < "请从键盘输入你猜的岁数: ";
getline(cin, tmp);
}
istringstream str(tmp);
str> > cai;

while(cai <0)
{
cout < < "时光能倒流吗? 请重新输入你猜的岁数: ";
goto in;
}
if(cai==sui)
cout < < " 对!岁数是 " < <cai < <endl < <endl;
if(cai> sui)
{
cout < < "过大了。 " < <endl < <endl;
goto in;
}
if(cai <sui&&cai> =0)
{
cout < < "小了。 " < <endl < <endl;
goto in;
}
system( "PAUSE ");
return 0;
}