PKU 3332 Parsing Real Numbers

http://poj.org/problem?id=3332
小数が入力されるので、それが正しい入力かを判定するというような問題。

前にも似たような問題があったけれど、微妙に違うっぽいです。
整数のみもILLEGALにして1WA。

string in;
int pos;
bool ok;

void exp(){
  if(pos==SZ(in)){
    ok-false;
    return;
  }

  if(in[pos]=='+' || in[pos]=='-')++pos;
  if(pos==SZ(in) || !isdigit(in[pos])){
    ok=false;
    return;
  }
  while(pos<SZ(in) && isdigit(in[pos]))++pos;
  if(pos==SZ(in))return;
  ok=false;
}

void sdec(){
  if(pos==SZ(in) || !isdigit(in[pos])){
    ok=false;
    return;
  }
  while(pos<SZ(in) && isdigit(in[pos]))++pos;
  if(pos==SZ(in)){
    return;
  }else if(in[pos]=='E' || in[pos]=='e'){
    ++pos;
    exp();
  }else{
    ok=false;
  }
}

void fint(){
  if(in[pos]=='+' || in[pos]=='-')++pos;
  if(pos==SZ(in) || !isdigit(in[pos])){
    ok=false;
    return;
  }
  while(pos<SZ(in) && isdigit(in[pos]))++pos;
  if(pos==SZ(in)){//?
    return;
  }
  if(in[pos]=='.'){
    ++pos;
    sdec();
  }else if(in[pos]=='e' || in[pos]=='E'){
    ++pos;
    exp();
  }else{
    ok=false;
  }
}

main(){
  int n;
  cin>>n;
  cin.ignore();
  rep(i,n){
    string temp;
    getline(cin,temp);
    in="";
    rep(i,SZ(temp))
      if(temp[i]!=' ')in+=temp[i];
    
    pos=0;
    ok=true;
    fint();
    cout<<(ok?"LEGAL":"ILLEGAL")<<endl;
  }
}