该程序检查简单的三角形类型:等边、等腰、直角等。但我得到了非常奇怪的结果。
我的代码:
#include <stdio.h>
#include <stdlib.h>
int comparator (const void * elem1, const void * elem2) {
int f = *((float*)elem1);
int s = *((float*)elem2);
if (f > s) return 1;
if (f < s) return -1;
return 0;
}
void checkTriangles(float *num){
float a = *num;
float b = *(num + 1);
float c = *(num + 2);
if((a*a + b*b)==c*c){
printf("right angled triangle");
}
else if(a==b || b==c || c==a){
printf("isosceles triangle");
}
else if(a==b && b==c){
printf("equilateral triangle");
}
else if(a!=b && b!=c && c!=a && ((a+b)>c)){
printf("normal triangle");
}
else{
printf("invalid");
}
}
int main(void){
char c = 'a';
char str[12];
float num[3];
while(c!='q'){
printf("\n\nenter the sides : ");
fgets(str , sizeof(str) , stdin);
sscanf(str , "%f%f%f", num , num + 1 , num + 2);
qsort(num, sizeof(num)/sizeof(*num), sizeof(*num), comparator);
printf("\n%f\n%f\n%f\n", num , num + 1 , num + 2);
checkTriangles(num);
printf("\nenter q to quit.. any other to continue : ");
c=getchar();
}
return 0;
}
但是,我得到了像这样的真正奇怪的输出:
我知道对这样的事情使用快速排序是矫枉过正的,但我想保持简短并使用比较器,只是为了好玩。
编辑:iv 添加了完整的代码,并检查了比较器以检查浮点数,但仍然得到相同的输出。