当前位置: 代码迷 >> C语言 >> [求助]程序编译出错各位高手给看看怎么改啊?(现在通过了T_T)
  详细解决方案

[求助]程序编译出错各位高手给看看怎么改啊?(现在通过了T_T)

热度:211   发布时间:2005-09-11 18:56:00.0
[求助]程序编译出错各位高手给看看怎么改啊?(现在通过了T_T)

这是书上的一个例题..俺只是照抄拿来编译, 俺是刚刚才学编程的.... 模块功能:限制在输入整数和浮点数时只能输入合法的数字、正负号、小数点,其余的字符忽略。 /*自定义头文件*/ getnum.h ********************************** extern unsigned int getnumError; /*声明外部变量*/

int GetInt(void);

long GetLong(void);

float GetFloat(void);

double GetDouble(void); *************************************** getnum.c ************************************** #include "getnum.h" #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <ctype.h>

#define BUFFER_SIZE 32 /*输入缓冲区大小*/

enum input_type{FLOAT,INT}inputType; /*输入类型*/ unsigned int getnumError=0; /*非0表示出错*/ static unsigned char buffer[BUFFER_SIZE]; /*输入缓冲区*/ static unsigned int pos=0; /*buffer中有效数据的末尾位置+1*/

static unsigned char *GetInput(void); static int IsValidChar(char ch); static int HasDot(void);

/* 函数功能:读取用户的int类型输入 入口:无 返回值:用户输入结果 */ int GetInt(void) { return (int)GetLong(); }

/* 函数功能:读取用户的long类型输入 入口:无 返回值:用户输入结果 */ long GetLong(void) { inputType=INT; return atol(GetInput()); }

/* 函数功能:读取用户的float类型输入 入口:无 返回值:用户输入结果 */ float GetFloat(void) { return (float)GetDouble(); }

/* 函数功能:读取用户的double类型输入 入口:无 返回值:用户输入结果 */ double GetDouble(void) { inputType=FLOAT; return atof(GetInput()); }

/* 函数功能:读取用户输入的字符串,限制必须时整数或者浮点数 入口:无 返回值:数据缓冲区 */ static unsined char* GetInput(void) { char c='\0'; pos=0;

while((c=getch())!='\r') /*回车输入结束*/ { if(c=='\b') /*输入退格符*/ { if(pos>0) { pos--; printf("\b\b"); /*删除前一个字符*/ } else { putchar('\a'); /*提示没有字符可删除*/ }

} else if(pos<(BUFFER_SIZE-1)) /*防止越界and为'\0'预留空间*/ { if(IsValidChar(c)) /*合法字符保存并回显*/ { buffer[pos++]=c; putchar(c); } else { putchar('\a'); /*提示输入非法字符*/ }

} else /*提示达到buffer上界*/ { putchar('\a'); } }

buffer[pos]='\0'; putchar('\a');

if(pos>0) { getnumError=0; } else { getnumError=1; /*用户什么都没输入*/ }

return buffer;

}

/* 函数功能:判断当前输入是否合法 入口:无 返回值:非0表示合法,0表示非法 */ static int IsValidChar(char ch) { int result;

if(ch>='0'&&ch<='9')

result=1;

else if(ch==0&&(ch=='-'||ch=='+'))

result=1;

else if(ch=='.'&&inputType==FLOAT&&(HasDot))

result=1;

else

result=0;

return result;

}

/* 函数功能:判断是否输入了小数点 入口:无 返回值:非0表示已经输入,0表示未输入 */ static in HasDot(void) { int i; for(i=0;i<pos&&buffer[i]=='.';i++)

;

return (i<pos);

} *********************************** main.c *********************************** #include "getnum.h"

main() { double f;

do {

printf("Input a number:"); f=GetDouble(); if(getnumError!=0)

printf("You input nothing.\n");

else

printf("What you input is %lf.\n",f);

}while(f!=-1);

} ***************************************

[此贴子已经被作者于2005-9-12 20:03:40编辑过]

搜索更多相关的解决方案: 编译  

----------------解决方案--------------------------------------------------------
为啥没人帮帮俺啊??.....T_T
----------------解决方案--------------------------------------------------------
没有说明
比如你的算法思想 几个函数的功能
谁花那么多时间自己捉摸呀
----------------解决方案--------------------------------------------------------
终于找到原因了....是因为3个输入错误.....晕啊....

各位兄弟如果因为此帖浪费了你的时间,请接受俺诚挚的道歉.....

另外多谢南湖兄提醒,以后俺发帖一定会注意这些细节的东西的.....

虽然通过了,俺还是重新编辑了主帖,算给各位菜鸟同人一个参考吧....嘿嘿.....

各位兄弟,以后还请多多帮忙....
----------------解决方案--------------------------------------------------------
  相关解决方案