📄 rddouble.c
字号:
/**************************************** * * * 在x列y行处读一长的正实数 * * ^^^^^^^^^^^^^^^^^^^^^^^^ * * * * 以回车结束, * * 长度大于14时返回 TLONG * * * ****************************************/#include "../inc/screen.h" rddouble(x,y,precsion,value,flag,negflag,lfflag)int x,y,precsion,flag,negflag,lfflag;double *value;{ int i,j,bad,tag,negsign; char ch,s[16]; if(x < 0 || x > 79 || y < 0 || y > 24 || precsion < 0 || precsion > 10) return(ERR); i = j = 0; tag = TRUE; negsign = FALSE; do{ scp(x + i,y); ch = wgetchar(); switch(ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(i == 14) /* 长度大于14 */ return(TLONG); else { s[i] = ch; i++; putchar(ch); } break; case BLANK: /* 退格处理 */ case 'h': case 'H': case BS: case '.': if(i>0) i--; if(i==0&&s[0]=='-')negsign=FALSE; tag = TRUE; scp(x + i,y); putchar(SP); break; case LF: case CR: if(i == 0) { if(lfflag == TRUE) return(QUIT); else beep(1); } break; case TAB: if(flag == TRUE) return(ABORT); break; case ESC: return(BKABORT); case '-': if(i == 0 && negflag == TRUE) { s[i] = ch; i++; putchar(ch); negsign = TRUE; } else beep(1); break; default: /* 非法字符处理 */ beep(1); break; } }while(i < 1 || (ch != CR && ch != LF));/* 以回车结束 */ if(precsion==3) { if(i==0) { s[0]='0'; s[1]=NUL; } else if(i==1) { s[5]=NUL; s[4]=s[0]; s[3]='0'; s[2]='0'; s[1]='.'; s[0]='0'; } else if(i==2) { s[5]=NUL; s[4]=s[1]; s[3]=s[0]; s[2]='0'; s[1]='.'; s[0]='0'; } else if(i==3) { s[5]=NUL; s[4]=s[2]; s[3]=s[1]; s[2]=s[0]; s[1]='.'; s[0]='0'; } else { s[i+1]=NUL; s[i]=s[i-1]; s[i-1]=s[i-2]; s[i-2]=s[i-3]; s[i-3]='.'; } } if(precsion==2) { if(i==0) { s[0]='0'; s[1]=NUL; } else if(i==1) { s[4]=NUL; s[3]=s[0]; s[2]='0'; s[1]='.'; s[0]='0'; } else if(i==2) { if(negflag==TRUE&&s[0]=='-') { s[5]=NUL; s[4]=s[1]; s[3]='0'; s[2]='.'; s[1]='0'; } else { s[4]=NUL; s[3]=s[1]; s[2]=s[0]; s[1]='.'; s[0]='0'; } } else { s[i+1]=NUL; s[i]=s[i-1]; s[i-1]=s[i-2]; s[i-2]='.'; } } sscanf(s,"%lf",value); if(negsign == TRUE) return(NEGSIGN); else return(TRUE); /* 正常返回 */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -