2010-05-27 64 views
-1
#include<stdlib.h> 
#include<stdio.h> 
#include<string.h> 
//This program is a sorting application that reads a sequence of numbers 
//from a file and prints them on the screen . The reading from the file here, 
//is a call back function . 

typedef int (*CompFunc)(const char* , const char*); 
typedef int (*ReadCheck)(char nullcheck); 
char array[100]; 
//Let this function be done in the library itself . It doesn't care as to 
//where the compare function and how is it implemented . Meaning suppose 
//the function wants to do sort in ascending order or in descending order 
//then the changes have to be done by the client code in the "COMPARE" function 
//who will be implementing the lib code . 
void ReadFile(FILE *fp,ReadCheck rc) 
{ 
    char a; 
    char d[100]; 
    int count = 0,count1=0; 
    a=fgetc(fp); 
    while(1 != (*rc)(a)) 
    { if(a=='\0') 
     { 
     //d[count1]='\0'; 
     strcpy(&array[count],d); 
     count=count+1; 
     } 
     else 
     { 

     d[count1]=a; 
     count1=count1+1; 

     } 
    } 

} 
void Bubblesort(char* array , int size , int elem_size , CompFunc cf) 
{ int i,j; 
    int *temp; 
    for(i=0;i < size ;i++) 
    { 
     for (j=0;j < size -1 ; j++) 
     { 
      // make the callback to the comparision function 
      if(1 == (*cf)(array+j*elem_size,array+ (j+1)*elem_size)) 
       { 
        //interchanging of elements 
        temp = malloc(sizeof(int *) * elem_size); 
        memcpy(temp , array+j*elem_size,elem_size); 
        memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size); 
        memcpy(array + (j+1)*elem_size , temp , elem_size); 
        free(temp); 
       } 
     } 
    } 
} 



//Let these functions be done at the client side 

int Compare(const char* el1 , const char* el2) 
    { 
     int element1 = *(int*)el1; 
     int element2 = *(int*)el2; 

     if(element1 < element2) 
      return -1; 
     if(element1 > element2) 
      return 1 ; 
     return 0; 
    } 

int ReadChecked(char nullcheck) 
    { 
     if (nullcheck=='\n') 
      return 1; 
     else 
      return 0; 
    } 
int main() 
{ 
    FILE *fp1; 
    int k; 
    fp1=fopen("readdata.txt","r"); 
    ReadFile(fp1,&ReadChecked); 
    Bubblesort((char*)array,5,sizeof(array[0]),&Compare); 
    printf("after sorting \n"); 
    for (k=0;k<5;k++) 
    printf("%d",array[k]); 

return 0; 
} 
+2

什麼似乎是問題? – 2010-05-27 11:43:08

+0

您是否嘗試過使用調試器來查看它卡住的位置? – Cascabel 2010-05-27 11:52:04

回答

1

只是可能該程序需要一段時間才能運行......也許。

這是一個可能的問題:當fgetc返回EOF(-1)時會發生什麼?

+0

不,它不運行它..它不終止..最有可能是一個無限循環 – Hick 2010-05-27 11:44:16

+0

+1:O(n^2)排序糟透了! – 2010-05-27 11:44:46

+0

我不認爲這對時間要求很高......查看代碼時,似乎只有5個元素需要排序。 – schnaader 2010-05-27 11:50:01

1

while(1 != (*rc)(a))

相關問題