回调函数应用之比较两个对象大小

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

typedef int (*cmp)(void const* one, void const* other); //抽象函数,比较两个对象大小

int cmp_int(void const *one, void const *other) //具体函数比较两个整数大小

{

const int *a = (int*) one; //必须转化

const int *b = (int*) other;

if (*a > *b)

return 1;

else if (*a == *b)

return 0;

else

return -1;

}

int cmp_string(void const *one, void const *other) //具体函数比较两个字符串大小
{
const char *str1 = (char*) one;
const char *str2 = (char*) other;
return strcmp(str1, str2);
}
void const *MaxofTwo(void const *one, void const *other, cmp func) //回调函数,返回两个对象最大的那个
{
if (func(one, other) >= 0)
return one;
else
return other;
}
void InputException() {
printf(“Input Exception!
“);
exit(0);
}
void MemException() {
printf(“Memeory Exception!
“);
exit(0);
}
void inputstring(char *&s,int len) //输入字符串,防止缓冲区溢出,len是最多可输入字符数
{
int i;
if(len<=0) InputException();
s=(char*)malloc(sizeof(len));
if(!s) MemException();
char *p;
char c;
i=0;
p=s;
while((c=getchar())!=’
‘ && i++<len)
{
*p++=c;
}
if(i<=len) s[i]=”;
else s[i-1]=”;
fflush(stdin);
}
int main(int argc, char **argv) {
int a, b;
printf(“a=”);
if (scanf(“%d”, &a) <= 0)
InputException();
printf(“b=”);
if (scanf(“%d”, &b) <= 0)
InputException();
int *c = (int*) MaxofTwo(&a, &b, cmp_int); //必须转化
printf(“The max Value betwwen %d and %d is %d
“, a, b, *c);
getchar(); //接收回车
char *s1, *s2;
printf(“The first string is:”);
inputstring(s1, 30);
printf(“The second string is:”);
inputstring(s2, 30);
char *str = (char*) MaxofTwo(s1, s2, cmp_string);
printf(“The Max string is:”);
puts(str);
return 0;
}
#include<stdlib.h>

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>