📄 getnum.cpp
字号:
#include <iostream>
#include <ctype.h>
#include <stdlib.h>
#include <string>
using namespace std;
const int MAXSIZE = 20;
enum state{ s0, s1, s2, s3, s4, s5, s6, s7};
char accept[MAXSIZE];
int index = 0;
char * check(){
index = 0;
state sta = s0;
char c;
while(c = getchar()){
if(sta == s0){
if(isdigit(c)){
sta = s1; accept[index++] = c;
}else if(c == '+' || c == '-'){
sta = s2; accept[index++] = c;
}else if(c == '.'){
sta = s3; accept[index++] = c;
}else{
sta = s0; cout<<"syntax error"<<endl;
break;
}
}else if(sta == s1){
if(isdigit(c)){
sta = s1; accept[index++] = c;
}else if(c == 'E'){
sta = s5; accept[index++] = c;
}else if(c == '.'){
sta = s4; accept[index++] = c;
}else{
sta = s0; //ungetchar(c);
break;
}
}else if(sta == s2){
if(isdigit(c)){
sta = s1; accept[index++] = c;
}else if(c == '.'){
sta = s3; accept[index++] = c;
}else{
sta = s0; cout<<"syntax error"<<endl;
break;
}
}else if(sta == s3){
if(isdigit(c)){
sta = s4; accept[index++] = c;
}else{
sta = s0; cout<<"syntax error"<<endl;
break;
}
}else if(sta == s4){
if(toupper(c) == 'E'){
sta = s5; accept[index++] = c;
}else if(isdigit(c)){
sta = s4; accept[index++] = c;
}else{
sta = s0; //ungetchar(c);
break;
}
}else if(sta == s5){
if(isdigit(c)){
sta = s7; accept[index++] = c;
}else if(c == '+' || c == '-'){
sta = s6; accept[index++] = c;
}else{
sta = s0; cout<<"syntax error"<<endl;
break;
}
}else if(sta == s6){
if(isdigit(c)){
sta = s7; accept[index++] = c;
}else{
sta = s0; cout<<"syntax error"<<endl;
}
}else if(sta == s7){
if(isdigit(c)){
sta = s7; accept[index++] = c;
}else{
sta = s0; //ungetchar(c);
break;
}
}
}
return accept;
}
int main()
{
while(true){
cout<<">>";
check();
accept[index] = '\0';
cout<<"index: "<<index<<endl;
cout<<"accept: "<<accept<<endl;
cout<<endl;
cout<<atof(accept)<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -